【Cocos TypeScript 零基础 15.1】

目录

  • 见缝插针
    • UI脚本
    • 针脚本
    • 球脚本
    • 心得_旋转
    • 心得_更改父节点
    • 心得_缓动动画
    • 成品展示图

见缝插针

本人只是看了老师的大纲,中途不明白不会的时候再去看的视频
所以代码可能与老师代码有出入
SIKI_学院_点击跳转

UI脚本

import { _decorator, Camera, color, Component, director, instantiate, Label, math, Node, Prefab, tween } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('ts_ui')
export class ts_ui extends Component {
    static inthis : ts_ui
    static getinthis() : ts_ui {return this.inthis}

    @property(Prefab) pin : Prefab = null
    @property(Node) cam : Node = null
    pin_num : number = 0    //  是否生成pin

    @property(Label) ui_fen : Label = null
    fen : number = 0
    @property(Camera) camera : Camera = null
    @property(Node) but : Node = null

    start() {
        ts_ui.inthis = this
        this.schedule(this.on_rate,1)
        this.on_fen(0)
    }

    update(deltaTime: number) {
        
    }
    on_rate(){
        if (this.pin_num == 1){return}  //  是否生成
        const p = instantiate(this.pin)
        this.cam.addChild(p)
        p.setPosition(0 , -640)
        this.pin_num = 1
    }
    on_fen(num : number){
        this.fen += num
        this.ui_fen.string = this.fen.toString()
    }
    on_end(){
        this.but.active = true
        this.on_anim()
        this.scheduleOnce(function(){director.pause()},1)
    }
    on_anim(){  //  结束缓动动画函数
        let new_col = new math.Color()
        new_col.r = 60
        new_col.g = 5
        new_col.b = 5
        new_col.a = 255
        tween(this.camera)
        .to(1 , {orthoHeight : 450 , clearColor : new_col})
        .start()
    }
    on_reset(){
        director.resume()
        director.loadScene(`s1`)
    }
}

针脚本

import { _decorator, Collider2D, Component, Contact2DType, Input, input, Node } from 'cc';
import { ts_circle } from './ts_circle';
import { ts_ui } from './ts_ui';
const { ccclass, property } = _decorator;

@ccclass('ts_pin_s')
export class ts_pin_s extends Component {
    move_sp : number = -2   //  -2刚生成时 -1等待发射 0发射 1完成碰撞
    start() {
        const col = this.getComponent(Collider2D)
        if (col){col.on(Contact2DType.BEGIN_CONTACT,this.on_bc,this)}   //  开启碰撞
        else {console.log(`针头 开启碰撞异常`)}
        input.on(Input.EventType.TOUCH_END , this.on_te , this)     //  开启触摸
    }
    on_bc (me : Collider2D , oth : Collider2D){
        console.log(`针头碰撞`,oth.name)
        if (oth.name == `Circle<CircleCollider2D>`){
            const pw = this.node.getWorldPosition()
            const rw = this.node.getWorldRotation()
            const cir = ts_circle.getinthis()
            this.node.setParent(cir.node)       //  更新父节点
            this.node.setWorldPosition(pw)
            this.node.setWorldRotation(rw)
            this.move_sp = 1
            const ui = ts_ui.getinthis()
            ui.pin_num = 0
            ui.on_fen(1)
        }
        if (oth.name == `Pin<BoxCollider2D>`){
            ts_ui.getinthis().on_end()
        }
    }
    on_te(){
        if (this.move_sp == -1){this.move_sp = 0}
    }
    update(deltaTime: number) {
        this.move(deltaTime)
    }
    move(deltaTime: number){
        if (this.move_sp >= 1){return}
        const pos = this.node.getPosition()
        if (this.move_sp == -2){
            if (pos.y <= -500){this.node.setPosition(pos.x , pos.y + deltaTime * 500)}      //  新生成速度
            else {this.move_sp = -1}
        }
        if (this.move_sp == -1){return}
        if (this.move_sp == 0){this.node.setPosition(pos.x , pos.y + deltaTime * 1000)}      //  发射速度
    }
}

move 函数处于性能考虑
应该在条件判断成立时 返回的,不应该多个IF轮流判定

球脚本

import { _decorator, CircleCollider2D, Collider2D, Component, Contact2DType, Input, Node } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('ts_circle')
export class ts_circle extends Component {
    static inthis : ts_circle
    static getinthis() : ts_circle {return this.inthis}

    start() {
        ts_circle.inthis = this
        const col = this.getComponent(Collider2D)
        if (col){col.on(Contact2DType.BEGIN_CONTACT,this.on_bc,this)}
        else {console.log(`球 开启碰撞异常`)}
    }
    on_bc(me : Node , oth : Node){
        console.log(`球 碰撞` , oth.name)
    }
    update(deltaTime: number) {
        this.node.angle += 2
        if (this.node.angle >= 360){this.node.angle = 0}
    }
}

心得_旋转

在这里插入图片描述
项目设置 > 功能裁剪 > 2D物理系统 > 内置2D物理系统
在不改内置的情况下

this.node.angle += 2    //  旋转角度速度

球旋转会卡住不动,取消刚体组件也可以使其正常旋转,但碰撞就会有点麻烦

心得_更改父节点

在变更父节点的时候,子节点的位置和角度会被重置
不想重置,就需要记录之前的位置和角度,更换后再设置回来

        if (oth.name == `Circle<CircleCollider2D>`){
            const pw = this.node.getWorldPosition()
            const rw = this.node.getWorldRotation()
            const cir = ts_circle.getinthis()
            this.node.setParent(cir.node)       //  更新父节点
            this.node.setWorldPosition(pw)
            this.node.setWorldRotation(rw)
            this.move_sp = 1
            const ui = ts_ui.getinthis()
            ui.pin_num = 0
            ui.on_fen(1)
        }

心得_缓动动画

还没有仔细研究,看了老师的视频,依葫芦画瓢
但看使用情况来看,以下是个人理解
tween 传入缓动组件
to 传入 1缓动执行时间 2组件需要缓动变更的属性
start 开始

    on_anim(){  //  结束缓动动画函数
        let new_col = new math.Color()
        new_col.r = 60
        new_col.g = 5
        new_col.b = 5
        new_col.a = 255
        tween(this.camera)
        .to(1 , {orthoHeight : 450 , clearColor : new_col})
        .start()
    }

成品展示图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/968508.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go+Wails+Vue 开发:添加停止按钮功能的实现

在本教程中&#xff0c;我将展示如何在一个使用 Wails 框架&#xff08;后端 Go&#xff09;和 Vue.js&#xff08;前端&#xff09;的彩票模拟器项目中添加一个“停止”按钮。由于现有的教程内容较为单一&#xff0c;我将通过具体的实现步骤进行详细说明。 项目初始化 首先&a…

微服务保护---Sentinel

1. 初始Sentinel 1.1. 雪崩问题及解决方案 1.1.1. 雪崩问题 微服务中&#xff0c;服务间调用关系错综复杂&#xff0c;一个微服务往往依赖于多个其它微服务。 如图&#xff0c;如果服务提供者I发生了故障&#xff0c;当前的应用的部分业务因为依赖于服务I&#xff0c;因此也会…

win32汇编环境,窗口程序使用跟踪条(滑块)控件示例一

;运行效果 ;win32汇编环境,窗口程序使用跟踪条(滑块)控件示例一 ;生成2条横的跟踪条,分别设置不同的数值范围,设置不同的进度副度的例子 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>…

pnpm的使用

pnpm的使用 1.安装和使用2.统一包管理工具下载依赖 1.安装和使用 pnpm:performant npm &#xff0c;意味“高性能的npm”。 pnpm由npm/yarn衍生而来,解决了npm/yarn内部潜在的bug,极大的优化了性能,扩展了使用场景。被誉为“最先进的包管理工具”。 pnpm安装指令: npm i -g p…

音视频协议

1. 多媒体信息 1.1 多媒体信息的两个主要特点&#xff1a; 信息量很大 标准语音&#xff1a;64Kbits(8KHz采样&#xff0c;8位编码)高质量音频&#xff1a;3Mbps(100KHz采样&#xff0c;12位编码) 在传输多媒体数据时&#xff0c;对时延和时延抖动均有较高要求 1.2 处理时延…

DeepSeek应用——与word的配套使用

目录 一、效果展示 二、配置方法 三、使用方法 四、注意事项 1、永久化使用 2、宏被禁用 3、office的生成失败 记录自己学习应用DeepSeek的过程...... 这个是与WPS配套使用的过程&#xff0c;office的与这个类似&#xff1a; 一、效果展示 二、配置方法 1、在最上方的…

通过可重入锁ReentranLock弄懂AQS

部分文章来源&#xff1a;JavaGuide 什么是AQS AQS的全称是抽象队列同步器 用来构建锁和同步器的 能简单且高效地构造出大量的锁和同步器 AQS的核心思想是什么 AQS 核心思想&#xff1a; 如果被请求的共享资源空闲&#xff0c;则将当前请求资源的线程设置为有效的工作线程…

【编程实践】vscode+pyside6环境部署

1 PySide6简介 PySide6是Qt for Python的官方版本&#xff0c;支持Qt6&#xff0c;提供Python访问Qt框架的接口。优点包括官方支持、LGPL许可&#xff0c;便于商业应用&#xff0c;与Qt6同步更新&#xff0c;支持最新特性。缺点是相比PyQt5&#xff0c;社区资源较少。未来发展…

DeepSeek-R1本地搭建

1. 前言 现在deepseek火上天了&#xff0c;因为各种应用场景,加上DeepSeek一直网络异常&#xff0c;所以本地部署Deepseek成为大家的另一种选择。 目前网络上面关于DeepSeek的部署方式有很多&#xff0c;但是太麻烦了&#xff0c;本文是一篇极为简单的DeepSeek本地部署方式&…

《qt open3d网格拉普拉斯平滑》

qt open3d网格拉普拉斯平滑 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionFilterLaplacian_triggered();void MainWindow::on_actionFil

DeepSeek-V3网络模型架构图解

DeepSeek-V3网络架构的创新主要在两次&#xff0c;分别是在前馈层的MOE&#xff08;混合专家模型&#xff09;和在注意力中的MHA&#xff08;多头潜在注意力&#xff0c;一种注意力计算规模压缩技术&#xff09;。 MOE&#xff08;混合专家模型&#xff09; 回顾最初的MOE GS…

.net6 mvc 获取网站(服务器端)的IP地址和端口号

注意&#xff1a;是网站的&#xff0c;服务端的 IP地址&#xff0c; 不是当前用户电脑的、本地的IP地址 两个图&#xff1a; 分析&#xff1a; var AbsolutePath HttpContext.Request.Url.AbsolutePath;//"/Meeting/GetLastMeetingOL"var AbsoluteUri HttpContext.…

无人机遥感图像拼接及处理实践技术:生态环境监测、农业、林业等领域,结合图像拼接与处理技术,能够帮助我们更高效地进行地表空间要素的动态监测与分析

近年来&#xff0c;无人机技术在遥感领域的应用越来越广泛&#xff0c;尤其是在生态环境监测、农业、林业等领域&#xff0c;无人机遥感图像的处理与分析成为了科研和业务化工作中的重要环节。通过无人机获取的高分辨率影像数据&#xff0c;结合图像拼接与处理技术&#xff0c;…

[Linux] 信号(singal)详解(二):信号管理的三张表、如何使用coredump文件、OS的用户态和内核态、如何理解系统调用?

标题&#xff1a;[Linux] 信号管理的三张表、如何使用coredump文件、OS的用户态和内核态、如何理解系统调用&#xff1f; 水墨不写bug &#xff08;图片来源&#xff1a;文心一言&#xff09; 正文开始&#xff1a; 目录 一、信号管理的三张表 &#xff08;1&#xff09;三张表…

Windows中使用Docker安装Anythingllm,基于deepseek构建自己的本地知识库问答大模型,可局域网内多用户访问、离线运行

文章目录 Windows中使用Docker安装Anythingllm&#xff0c;基于deepseek构建自己的知识库问答大模型1. 安装 Docker Desktop2. 使用Docker拉取Anythingllm镜像2. 设置 STORAGE_LOCATION 路径3. 创建存储目录和 .env 文件.env 文件的作用关键配置项 4. 运行 Docker 命令docker r…

w~自动驾驶~合集17

我自己的原文哦~ https://blog.51cto.com/whaosoft/13269720 #FastOcc 推理更快、部署友好Occ算法来啦&#xff01; 在自动驾驶系统当中&#xff0c;感知任务是整个自驾系统中至关重要的组成部分。感知任务的主要目标是使自动驾驶车辆能够理解和感知周围的环境元素&#…

利用邮件合并将Excel的信息转为Word(单个测试用例转Word)

利用邮件合并将Excel的信息转为Word 效果一览效果前效果后 场景及问题解决方案 一、准备工作准备Excel数据源准备Word模板 二、邮件合并操作步骤连接Excel数据源插入合并域预览并生成合并文档 效果一览 效果前 效果后 场景及问题 在执行项目时的验收阶段&#xff0c;对于测试…

2024 CyberHost 语音+图像-视频

项目&#xff1a;CyberHost: Taming Audio-driven Avatar Diffusion Model with Region Codebook Attention 音频驱动的身体动画面临两个主要挑战&#xff1a;&#xff08;1&#xff09;关键人体部位&#xff0c;如面部和手部&#xff0c;在视频帧中所占比例较小&#x…

web前端第三次作业

题目 本期作业 WEB第三次作业 请使用JS实一个网页中登录窗口的显示/隐藏&#xff0c;页面中拖动移动&#xff0c;并且添加了边界判断的网页效 代码图片 效果展示 代码 <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8&qu…

国产ARM处理器工控机如何助力企业实现自主可控?

选择国产ARM处理器工控机的原因可以从多个角度来考虑&#xff0c;包括技术、经济、安全和政策等方面。以下是一些关键理由&#xff1a; 技术优势 低功耗高效能&#xff1a;ARM架构以其出色的能效比著称&#xff0c;适合需要长时间运行的工业控制应用。适应性强&#xff1a;国…