【Cocos TypeScript 零基础 6.1】

目录

  • 敌机
    • 敌机通用逻辑
    • 制作动画
    • 制作另外的敌机
    • 制作自动生成敌机
    • 整理自己实验写的

敌机

  1. 创建一个空节点 (绑定敌机逻辑,敌机相关都可以存在此节点下,编程更有逻辑,便于后续维护)
  2. 制作 prefab
  3. 制作销毁动画
  4. 制作第二个敌机
  5. 敌机0自动生成

敌机通用逻辑

老是创建了2个空节点?
父节点通用,
子节点显示? (不太理解)
创建新脚本,绑定到敌机父节点上
写通用代码 (系统自带的就没有粘贴出来了)

export class TS_enemy extends Component {
    @property speed : number = 200  //  敌机移动速度 属性面板优先
    start() {

    }

    update(deltaTime: number) {
        const pos1 = this.node.position
        this.node.setPosition(
            pos1.x,
            pos1.y - deltaTime * this.speed //  敌机向下走
        )
        if (pos1.y < -852) this.node.destroy()  //  到底自动销毁
    }
}

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

制作动画

body 用来播放动画

  1. 选中 body
  2. 添加动画组件
  3. 新建动画资源 enemy0_down
  4. 无法在空节点上创建 spirit 动画
  5. 直接在敌机上创建 spirit 动画
  6. 动画编辑 > 属性 > cc.spirit > spiritFrame
  7. 添加关键帧
  8. 保存 (场景左上角保存) 再关闭

小技巧 空关键帧
动画设置完后再额外多复制一帧
选中多的一帧,删除图片 (不是删除关键帧)
在这里插入图片描述
完成后在代码里调试一下看动画是否播放
再编辑下代码

import { _decorator, Animation, Component, Node } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('TS_enemy')
export class TS_enemy extends Component {
    @property speed : number = 200  //  敌机移动速度 属性面板优先
    @property kill : number = 0 //  判断子弹是否击中敌机
    @property(Animation) anim_down : Animation = null // 建立动画绑定位,准备绑定
    start() {

        if (this.kill == 1) this.anim_down.play()   //  播放动画
    }

    update(deltaTime: number) {
        const pos1 = this.node.position
        this.node.setPosition(
            pos1.x,
            pos1.y - deltaTime * this.speed //  敌机向下走
        )
        if (pos1.y < -852) this.node.destroy()  //  到底自动销毁
    }
}

运行动画无异常,不知道后续有没有问题,我现在cocos版本 3.8.5
敌机属性
在这里插入图片描述
敌机0属性
在这里插入图片描述

小技巧
在选择 Animation 的时候,如果选错
在 import 中删除,再写可以重新选择

制作另外的敌机

在场景中复制粘贴就好
在这里插入图片描述
修改贴图
在这里插入图片描述
再制作动画,详细步骤请参考之前章节

制作自动生成敌机

关键代码

@property enemy_retime_0 : number = 1   //  敌机0刷新间隔
@property(Prefab) enemy0 : Prefab = null    //  敌机0模板 生成绑定位
this.schedule(this.birth0,this.enemy_retime_0)   //  设置定时器 (调用方法 , 定时)

完整代码

import { _decorator, Component, instantiate, math, Node, Prefab } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('TS_enemy_sheng')
export class TS_enemy_sheng extends Component {
    @property enemy_retime_0 : number = 1   //  敌机0刷新间隔
    @property enemy_retime_1 : number = 10
    @property enemy_retime_2 : number = 30

    @property(Prefab) enemy0 : Prefab = null    //  敌机0模板 生成绑定位
    @property(Prefab) enemy1 : Prefab = null
    @property(Prefab) enemy2 : Prefab = null

    start() {
        this.schedule(this.birth0,this.enemy_retime_0)   //  设置定时器 (调用方法 , 定时)
    }

    update(deltaTime: number) {
        //if (deltaTime > this.enemy_retime_0){this.birth0} //  有定时器这个没必要
    }
    protected onDestroy(): void {   //  关闭
        this.unschedule(this.birth0)    //  关闭敌机0定时器
    }
    birth0(){
        const en0 = instantiate(this.enemy0)    //  实例化
        this.node.addChild(en0) //  创建实体
        const posx = math.randomRangeInt(-215,215)  //  随机x轴位置
        en0.setPosition(posx,852)   //  设置生成物的坐标
    }
}

整理自己实验写的

应为自己依葫芦画瓢,自己写的代码
自己添加的属性乱七八糟的
现在整理调整了一下,暂时看没问题
总结如下
在这里插入图片描述

  1. 先构建精灵样本 (定义精灵,怎么叫无所谓,要明白那个意思)
  2. 精灵样本里放动画,下面放 body
  3. body 里放行动 TS脚本
  4. 精灵拖进资源列生成 prefab 文件
    (prefab 本来想说这应该才是完整精灵,但是一想还没有受打击外观改变,仅仅只有动画还没触发,也还没设定碰撞体积,但是可以简单理解成完整精灵)
  5. enemy 空节点上绑定生成敌机逻辑 TS脚本

如下图
在这里插入图片描述
在这里插入图片描述
上图 boby 属性不知道写的对不对,不对的话后续再改
在这里插入图片描述
小技巧
在编辑 hit 动画 (受打击动画) 时,如果不还原状态 (比如只有1帧的受打击动画)
可以在第二帧加上原图片,
我自己运行发现敌机1敌机2不动
重新生成精灵,很快的
把移动脚本绑定到精灵上,不要绑定到空节点 boby 上
运行就可以正常刷新,正常移动了
在这里插入图片描述
还是那句话,有问题后续再改

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

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

相关文章

基于 GEE 制作研究区影像覆盖图

目录 1 研究区影像覆盖图案例 2 基于 GEE 制作研究区影像覆盖图完整代码 3 运行结果 在写论文的时候&#xff0c;会有一小节内容专门介绍自己的研究区和使用的影像数据。为了让论文非常漂亮&#xff0c;有时候就需要做出研究区的地理位置图和所用卫星影像覆盖图&#xff0c;…

Jenkins pipeline 发送邮件及包含附件

Jenkins pipeline 发送邮件及包含附件 设置邮箱开启SMTP服务 此处适用163 邮箱 开启POP3/SMTP服务通过短信获取TOKEN &#xff08;保存TOKEN, 后面Jenkins会用到&#xff09; Jenkins 邮箱设置 安装 Build Timestamp插件 设置全局凭证 Dashboard -> Manage Jenkins …

spring boot启动源码分析(三)之Environment准备

上一篇《spring-boot启动源码分析&#xff08;二&#xff09;之SpringApplicationRunListener》 环境介绍&#xff1a; spring boot版本&#xff1a;2.7.18 主要starter:spring-boot-starter-web 本篇开始讲启动过程中Environment环境准备&#xff0c;Environment是管理所有…

机器人手眼标定

机器人手眼标定 一、机器人手眼标定1. 眼在手上标定基本原理2. 眼在手外标定基本原理 二、眼在手外标定实验三、标定精度分析 一、机器人手眼标定 要实现由图像目标点到实际物体上抓取点之间的坐标转换&#xff0c;就必须拥有准确的相机内外参信息。其中内参是相机内部的基本参…

时敏软件定义网络的服务保证

论文标题&#xff1a; Service Guarantees for Time-Sensitive Software-Defined Networks作者信息&#xff1a; Weijiang Kong论文出处&#xff1a; Eindhoven University of Technology, 2025年1月20日 摘要&#xff1a; 在过去十年中&#xff0c;随着半导体技术的进步和对更…

一款免费的电子书制作软件:FLBOOK

对于作者、讲师、企业或个人来说&#xff0c;制作一款专业的电子书&#xff0c;不仅能有效传播知识和信息&#xff0c;还能提升个人品牌形象。然而&#xff0c;在众多电子书制作软件中&#xff0c;如何找到一款好用的工具呢&#xff1f;今天&#xff0c;给大家分享这款电子书制…

时频分析之S变换

S变换的提出 1996年&#xff0c;由R.G Stockwell 提出了S变换&#xff0c;和其他时频分析工具一样&#xff0c;通过S变换&#xff0c;我们可以同时从时域以及频域观察一个信号的能量分布。S变换融合了短时傅里叶变换和小波变换的优点。关于S变换&#xff0c;最早发表于TSP上的…

【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集

【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法&#xff0c;以及自动化实时数据采集 mmWave Studio提供的功能完全够用了 不用去纠结用DCA1000低延迟、无GUI传数据 速度最快又保证算力无非就是就是Linux板自己写驱动做串口和UDP 做雷达产品应用也不会采用DCA1000的…

MYSql------视图

什么是视图 定义&#xff1a;视图是一种虚拟的表&#xff0c;它是基于 SQL 查询语句的结果集而建立的。视图并不存储实际的数据&#xff0c;而是根据查询语句从一个或多个实际的表中提取数据&#xff0c;类似于存储在数据库中的预定义查询。作用&#xff1a; 简化复杂查询&…

基于Matlab的变压器仿真模型建模方法(13):单相升压自耦变压器的等效电路和仿真模型

1.单相升压自耦变压器的基本方程和等效电路 单相升压自耦变压器的接线原理图如图1所示。在建立自耦变压器的基本方程时,仍然把它看成是从双绕组变压器演变而来。在图1中,设节点a到节点b部分的绕组的匝数为,对应于双绕组变压器的原边绕组;节点c到节点a部分的绕组的绕组匝数为…

电脑之故障检测(Computer Fault Detection)

电脑之故障检测 在日常使用电脑的过程中&#xff0c;我们难免会遇到各种各样的故障。从简单的软件冲突到复杂的硬件损坏&#xff0c;这些问题往往让人头疼不已。然而&#xff0c;掌握一些基本的电脑故障检测方法&#xff0c;可以帮助我们快速定位问题所在&#xff0c;并采取相…

Jmeter-压测时接口如何按照顺序执行

Jmeter-压测时接口如何按照顺序执行-临界部分控制器 在进行压力测试时&#xff0c;需要按照顺序进行压测&#xff0c;比如按照接口1、接口2、接口3、接口4 进行执行 查询结果是很混乱的&#xff0c;如果请求次数少&#xff0c;可能会按照顺序执行&#xff0c;但是随着次数增加…

unity学习15:预制体prefab

目录 1 创建多个gameobject 2 创建prefab 2.1 创建prefab &#xff08;类&#xff09; 2.2 prefab 是一个文件 2.3 prefab可以导出 3 创建prefab variant &#xff08;子类&#xff09; 3.1 除了创建多个独立的prefab&#xff0c; 还可以创建 prefab variant 3.2 他…

(七)Linux库的串口开发

文章目录 基于官方提供的串口测试代码部分解析代码部分1. usage 函数2. opt_parsing_err_handle 函数3. sig_handle 函数4. init_serial 函数5. serial_write 函数6. serial_read 函数7. run_read_mode 函数8. run_write_mode 函数9. run_loopback_test 函数 进行测试第一步编译…

【Uniapp-Vue3】创建自定义页面模板

大多数情况下我们都使用的是默认模板&#xff0c;但是默认模板是Vue2格式的&#xff0c;如果我们想要定义一个Vue3模板的页面就需要自定义。 一、我们先复制下面的模板代码&#xff08;可根据自身需要进行修改&#xff09;&#xff1a; <template><view class"…

【机器视觉】OpenCV 图像轮廓(查找/绘制轮廓、轮廓面积/周长、多边形逼近与凸包、外接矩形)

文章目录 7. 图像轮廓7.1 什么是图像轮廓7.2 查找轮廓7.3 绘制轮廓7.4 轮廓的面积和周长7.5 多边形逼近与凸包7.6 外接矩形 OpenCV官网 7. 图像轮廓 7.1 什么是图像轮廓 图像轮廓是具有相同颜色或灰度的连续点的曲线. 轮廓在形状分析和物体的检测和识别中很有用。 轮廓的作用…

20250109使用M6000显卡在Ubuntu20.04.6下跑whisper来识别中英文字幕

20250109使用M6000显卡在Ubuntu20.04.6下跑whisper来识别中英文字幕 2025/1/9 20:57 https://blog.csdn.net/wb4916/article/details/144541848 20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕 步骤&#xff1a; 1、在NVIDIA的官网下载并安装M6000显卡在WIN10下的最…

EtherCAT转CANopen数字油田的高效解决方案

在数字化时代&#xff0c;油田的管理和运作正经历着深刻的变革。传统的油田监测系统受限于通信技术&#xff0c;往往难以满足实时、高效的数据传输需求。面对这一挑战&#xff0c;开疆智能EtherCAT转CANopen网关应运而生&#xff0c;它以其卓越的性能和高度的兼容性&#xff0c…

C语言——文件IO 【文件IO和标准IO区别,操作文件IO】open,write,read,dup2,access,stat

1.思维导图 2.练习 1&#xff1a;使用C语言编写一个简易的界面&#xff0c;界面如下 1&#xff1a;标准输出流 2&#xff1a;标准错误流 3&#xff1a;文件流 要求&#xff1a;按1的时候&#xff0c;通过printf输出数据&#xff0c;按2的时候&#xff0c;通过p…

Android - NDK :JNI实现异步回调

在android代码中&#xff0c;通过JNI调用c层子线程执行耗时任务&#xff0c;在c层子线程中把结果回调到android层&#xff0c; C语言小白&#xff0c;请批评指正&#xff01; android层代码&#xff1a; import androidx.appcompat.app.AppCompatActivity;import android.os.…