当前位置: 首页 > news >正文

Cocos Creator2D游戏开发(6)-飞机大战(4)-敌机产生

敌机产生&玩家发射子弹

敌机产生:
创建一个空节点
创建一个敌机预制体
把敌机图片拖入预制体内
使用代码生成敌机
让敌机动起来

  1. 创建一个预制体enemy_prefab
  2. 双击预制体enemy_prefab,然后拖入一个敌机图片,设置好方向和尺寸,一定要记得保存然后关闭(场景编辑器里面的保存)
    在这里插入图片描述
  3. 创建一个空节点enemy_node
  4. 创建一个脚本root.ts和root_node绑定
  5. root.ts添加 两行代码,保存
`   @property(Node) enemy_node: Node;   @property(Prefab) enemy_prefab: Prefab;  `

在这里插入图片描述
6. 选中root_node节点 绑定节点和预制体, 保存
在这里插入图片描述
7. root.ts代码

import { _decorator, Component, instantiate, Node, Prefab } from 'cc';
const { ccclass, property } = _decorator;@ccclass('root')
export class root extends Component {@property(Node) enemy_node: Node;   // 添加属性 以便在代码中引用 敌人节点@property(Prefab) enemy_prefab: Prefab;   // 添加属性 以便在代码中 动态生成 敌人start() {this.createEnemies(); //使用定时器生成敌机}update(deltaTime: number) {}createEnemies() {this.schedule(() => {this.createOneEnemy();}, 1);}// 创建一个敌机createOneEnemy() {// console.log("createOneGold !");const enemyPrefab = instantiate(this.enemy_prefab);   // 实例化一个对象 (动态生成)this.enemy_node.addChild(enemyPrefab);     // 将对象 添加到某个 节点内let x = (Math.random() * 360)   // random() 0-360 enemyPrefab.setPosition(180 - x, 350);  // 设置敌机的Y坐标console.log("enemyPrefab: " + (180 - x) + "   y" + 350);}}

运行,飞机出来了,就是不会动
在这里插入图片描述
8. 让敌机飞
①创建Enemy.ts
②Enemy.ts和enemy_node节点绑定
③ 编写enemy.ts代码

import { _decorator, Component, Node } from 'cc';
const { ccclass, property } = _decorator;@ccclass('Enemy')
export class Enemy extends Component {start() {}update(deltaTime: number) {const enemy_list = this.node.children;let need_destroy =[];for (let i = 0; i < enemy_list.length; i++) {const pos  = enemy_list[i].getPosition();if (pos.y < -400) {need_destroy.push(i);}else{enemy_list[i].setPosition(pos.x, pos.y - 10);}}for (let j = 0; j < need_destroy.length; j++) {const index =  need_destroy[j];enemy_list[index].destroy(); //销毁对象}}
}

然后运行 飞机就能飞了
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring知识点
  • DataEase一键部署:轻松搭建数据可视化平台
  • uniapp 重置表单数据
  • 在Postman中引用JS库
  • C++ | Leetcode C++题解之第283题移动零
  • Unity顶点动画(Vertex Animation):创造动态视觉效果
  • 【SpringBoot】参数传递
  • C++设计模式PIMPL模式
  • 常用Git 管理工具
  • 7月24日JavaSE学习笔记
  • Ubuntu、centos、openEuler安装docker
  • Teamcenter RAC开发,创建Item的两种方式
  • 解密阿里大神写的天书般的Tree工具类,轻松搞定树结构!
  • 【总结】前端JQuery获取Java后端文件流实现常规附件预览功能
  • Qt基础 | QSqlQueryModel 的使用 | QSqlQuery的使用
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [Vue CLI 3] 配置解析之 css.extract
  • CentOS 7 修改主机名
  • chrome扩展demo1-小时钟
  • leetcode386. Lexicographical Numbers
  • Linux链接文件
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Mac转Windows的拯救指南
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • PermissionScope Swift4 兼容问题
  • PHP CLI应用的调试原理
  • PHP 的 SAPI 是个什么东西
  • 初识 webpack
  • 区块链分支循环
  • 如何学习JavaEE,项目又该如何做?
  • 树莓派 - 使用须知
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #pragam once 和 #ifndef 预编译头
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (rabbitmq的高级特性)消息可靠性
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (顺序)容器的好伴侣 --- 容器适配器
  • (转)【Hibernate总结系列】使用举例
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .Net Core 中间件验签
  • .NET IoC 容器(三)Autofac
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .Net中的设计模式——Factory Method模式
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • /etc/shadow字段详解
  • ??javascript里的变量问题
  • @Autowired注解的实现原理
  • @Bean, @Component, @Configuration简析
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法