【Cocos TypeScript 零基础 6.1】

news/2025/1/10 10:31:34 标签: typescript, javascript, 前端, cocos

目录

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

敌机

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

敌机通用逻辑

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

typescript">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. 保存 (场景左上角保存) 再关闭

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

typescript">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 中删除,再写可以重新选择

制作另外的敌机

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

制作自动生成敌机

关键代码

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

完整代码

typescript">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 上
运行就可以正常刷新,正常移动了
在这里插入图片描述
还是那句话,有问题后续再改


http://www.niftyadmin.cn/n/5818522.html

相关文章

物联网开发 的开发语言建议

对于物联网开发&#xff0c;选择合适的编程语言取决于具体的项目需求、硬件平台以及开发团队的技能。以下是几种常用的物联网开发语言及其适用场景&#xff0c;特别考虑到您当前的工作空间中包含 JavaScript 和 Vue 等技术栈&#xff1a; JavaScript (Node.js) 优点&#xff1a…

TaskBuilder前端组件简介

3.3.3.1前端组件的分类 前端页面是由众多组件层层嵌套构成的&#xff0c;这些组件是任讯信息自主研发的一套前端UI组件&#xff0c;称为tfp组件&#xff0c;这些组件根据其功能和特点又分为几大类&#xff0c;它们的继承关系如下图所示&#xff1a; 从图中可知&#xff0c;所…

多活架构的实现原理与应用场景解析

一、多活架构为何如此重要? 企业的业务运营与各类线上服务紧密相连,从日常的购物消费、社交娱乐,到金融交易、在线教育等关键领域,无一不依赖于稳定可靠的信息系统。多活架构的重要性愈发凸显,它宛如一位忠诚的卫士,为业务的平稳运行保驾护航。 回想那些因系统故障引发的…

【ROS2】☆ launch之Python

☆重点 ROS1和ROS2其中一个很大区别之一就是launch的编写方式。在ROS1中采用xml格式编写launch&#xff0c;而ROS2保留了XML 格式launch&#xff0c;还另外引入了Python和YAML 编写方式。选择哪种编写取决于每位开发人员的爱好&#xff0c;但是ROS2官方推荐使用Python方式编写…

Vscode 如何使用GitHub Copilot

一、“GitHub Copilot”进行登录 前提必须有github账号&#xff0c;如果没有就注册一个&#xff1b; 系统会提示您输入 GitHub 凭据。单击“登录 GitHub”&#xff0c;然后单击“允许”并输入您的 GitHub 凭据。 登录成功后&#xff1a; 二、 GitHub Copilot功能 1、预测代码 …

【技术分享】如何利用rdesktop实现Linux远程Windows桌面高效办公

文章目录 前言1. Windows 开启远程桌面2. Linux安装rdesktop工具3. Win安装Cpolar工具4. 配置远程桌面地址5. 远程桌面连接测试6. 设置固定远程地址7. 固定地址连接测试 前言 随着技术的飞速发展&#xff0c;我们有了越来越多的方法来实现远程办公。今天我要给大家介绍一个特别…

G-Star Landscape 2.0 重磅发布,助力开源生态再升级

近日&#xff0c;备受行业瞩目的 G-Star Landscape 迎来了其 2.0 版本的发布&#xff0c;这一成果标志着 GitCode 在开源生态建设方面又取得了重要进展。 G-Star Landscape仓库链接&#xff1a; https://gitcode.com/GitCode-official-team/G-Star-landscape 2024 GitCode 开…

YARN 架构组件及原理

一、YARN 体系架构 YARN&#xff08;Yet Another Resource Negotiator&#xff0c;另一种资源协调者&#xff09; 是 Hadoop 2.0 中的资源管理系统&#xff0c;它的基本设计思想是将 MRv1 中的 JobTracker拆分成了两个独立的服务 &#xff1a;一个全局的资源管理器 ResourceMa…