Cocos Creator2D游戏开发(7)-飞机大战(5)-让子弹飞

飞机大战(5)-碰撞及积分
参考敌机的生成

  1. 子弹由飞机生成,放在player_node节点
  2. 子弹重复使用,要使用预制体;
  3. 子弹新增了动画

①创建一个预制体 命名为playerBullet_prefab
在这里插入图片描述
② 双击预制体将bullet1图片拖入预制体
在这里插入图片描述
保存,关闭(场景编辑器里面的)
③ 发射子弹 player加入代码 @property(Prefab) playerBullet_prefab: Prefab; // 子弹预制体
在这里插入图片描述
将预制体和代码绑定
在这里插入图片描述Player.ts加入创建子弹的代码
在这里插入图片描述此时Player.ts的完整代码如下

import { _decorator, Component, EventTouch, Input, input, instantiate, Prefab, UITransform } from 'cc';
const { ccclass, property } = _decorator;@ccclass('Player')
export class Player extends Component {@property(Prefab) playerBullet_prefab: Prefab;   // 子弹预制体private isPress; //是否按下start() {this.isPress = false;this.fireBullet();}onLoad() {input.on(Input.EventType.TOUCH_START, this.onTouchStart, this);  //注册按下事件input.on(Input.EventType.TOUCH_MOVE, this.onTouchMove, this);  // 注册移动事件input.on(Input.EventType.TOUCH_END, this.onToucheEnd, this); // 注册离开事件}onToucheEnd(event: EventTouch) {this.isPress = false;}onTouchMove(event: EventTouch) {if (!this.isPress) {return;}const player = this.node.getChildByName("Player"); // 获取指定的组件if (player === null) {return;}const uiPos = event.getUILocation(); //获取世界坐标player.setWorldPosition(uiPos.x, uiPos.y, 0); // 设置指定坐标}onTouchStart(event: EventTouch) {const player = this.node.getChildByName("Player");if (player === null) {return;}const transform = player.getComponent(UITransform);const newRect = transform.getBoundingBoxToWorld(); //获取player组件框框if (newRect.contains(event.getUILocation())) {this.isPress = true;}}update(deltaTime: number) {}fireBullet() {this.schedule(() => {this.createOneBullet();}, 0.1);}// 创建一个敌机createOneBullet() {if (this.playerBullet_prefab == null) return; // 不然会报错 The thing you want to instantiate must be an objectconst player = this.node.getChildByName("Player");if (player === null) {return;}const bulletPrefab = instantiate(this.playerBullet_prefab);   // 实例化一个对象 (动态生成)this.node.addChild(bulletPrefab);     // 将对象 添加到某个 节点内const pos = player.getPosition();bulletPrefab.setPosition(pos.x, pos.y);  // 设置子弹坐标}}

现在已经可以发射子弹了,但是子弹是是静止的,不会动,向下面这样

在这里插入图片描述
④ 让子弹动起来
创建脚本PlayerBullet.ts脚本里写的是子弹运动的逻辑
PlayerBullet.ts内容

import { _decorator, Component, Node, Vec3 } from 'cc';
const { ccclass, property } = _decorator;@ccclass('PlayerBullet')
export class PlayerBullet extends Component {private speed: number = 8;private _curPos: Vec3 = new Vec3();private _targetPos: Vec3 = new Vec3();private isExplo = false;start() {}update(deltaTime: number) {console.log('Bullet destroy');this.move(0, this.speed);// 移动到屏幕外之后进行销毁:const pos = this.node.getPosition(); // 获取角色当前位置let yy = pos.y;if (yy > 400) {this.node.destroy();//console.log('Bullet destroy');}}move(x, y) {this.node.getPosition(this._curPos); // 获取角色当前位置Vec3.add(this._targetPos, this._curPos, new Vec3(x, y, 0));    // 计算出目标位置this.node.setPosition(this._targetPos); // 将位移设置给角色}
}

接下来将脚本和预制体绑定起来,保存

在这里插入图片描述
现在子弹就能动了;

⑤ 让子弹旋转起来
新建一个动画体,命名为playerBullet_animation.amim 保存在assets/animation/文件夹中
在这里插入图片描述
动画属性添加spriteFrame

在这里插入图片描述创建动画帧 每5帧插入一张新动画 (这里重复用了第一张) 在这里插入图片描述
播放方式改为循环播放,加载后播放
在这里插入图片描述
添加动画并绑定在这里插入图片描述
在这里插入图片描述
保存,启动.
子弹就转起来了
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络安全】破解邀请码实现未经授权的访问和账户接管

未经许可,不得转载。 文章目录 前言1、邀请用户2、低级账户访问3、提取用户 ID 和 OTP4、准备字典5、攻击6、账户接管 前言 ExampleSpark(化名)是一个专为团队管理和项目协作而设计的强大平台。它提供了用于管理用户、项目和权限的综合工具。…

【Python中OGR和GDAL有什么区别】

OGR和GDAL在地理信息系统(GIS)和遥感领域都扮演着重要角色,但它们在功能和处理的数据类型上有所不同。以下是OGR和GDAL的主要区别: 一、定义与功能 GDAL(Geospatial Data Abstraction Library) 定义&#…

docker部署本地词向量模型

开源项目:GitHub - huggingface/text-embeddings-inference: A blazing fast inference solution for text embeddings models 1. 下载词向量模型 参考我的另一篇博客:langchain 加载本地词向量模型 2. 部署词向量模型 就三行命令 model/data/BAAI/…

【华视电子CVR100A】 身份证读取与酒店收银系统源码整合:CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构

一、酒店系统连接身份证阅读器好处 在开房界面,点击读取身份证,可以自动读取姓名,性别,地址,身份证号码 1. 提高办理入住效率 - 传统的手动输入身份证信息繁琐且容易出错,一键读取能够快速准确地获取客人身…

机器学习算法——常规算法,在同的业务场景也需要使用不同的算法(一)

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

苏州大学学报(哲学社会科学版)

《苏州大学学报(哲学社会科学版)》是苏州大学主办的综合性哲学社会科学类学术期刊,创刊于1906年,是我国高等学校第一本学报。逾百年以来,学报始终坚持正确舆论导向,追踪理论前沿,聚焦学术热点&a…

【C语言报错已解决】Format String Vulnerability

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引言 在日常开发中,我们经常会遇到各种各样的bug,其中格式化字符串漏洞报错可能是最让人头疼的一种。这…

基于SpringBoot+Vue的地方美食分享网站(带1w+文档)

基于SpringBootVue的地方美食分享网站(带1w文档) 人类的进步带动信息化的发展,使人们生活节奏越来越快,所以人们越来越重视信息的时效性。以往的管理方式已经满足不了人们对获得信息的方式、方便快捷的需求。即地方美食分享网站慢慢的被人们关注。 项目简…

Redis集群启动步骤

前提:处理好配置文件。 一、通过配置文件启动三个Redis实例。 执行命令:redis-server /opt/redis/cluster/16381/16381.conf 二、因为 Redis 集群至少需要 3 个主节点。所以这三个都是主节点,暂不考虑从节点。 创建一个包含 3 个主节点的…

java RestClientBuilder es 集群 鉴权

在Java中使用RestClientBuilder连接到Elasticsearch集群并进行鉴权,可以通过设置HttpHosts、RequestConfig以及添加相应的Header来实现。 以下是一个示例代码: import org.apache.http.Header; import org.apache.http.HttpHost; import org.apache.htt…

全网最适合入门的面向对象编程教程:27 类和对象的Python实现-Python中异常层级与自定义异常类的实现

全网最适合入门的面向对象编程教程:27 类和对象的 Python 实现-Python 中异常层级与自定义异常类的实现 摘要: 本文主要介绍了在使用 Python 进行面向对象编程时,异常的层级和如何使用继承关系完成自定义自己项目中异常类,并以传…

麒麟v10安装mysql5.7(ARM架构)

下载路径:华为云镜像 麒麟v10是潮流时代的新时髦的linux操作系统,但随着ARM架构流行,出现了一些卡点,不以为然,没当回事的大吃一惊。经常卡住。例如: 在安装mysql5.7(ARM架构) 最简单&#xf…

刷题了:144.二叉树的前序遍历心|145.二叉树的后序遍历心|94.二叉树的中序遍历己

递归遍历 文章讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%80%92%E5%BD%92%E9%81%8D%E5%8E%86.html#%E6%80%9D%E8%B7%AF 视频讲解:https://www.bilibili.com/video/BV1Wh411S7xt/?spm_id_from333.788&vd_sourcee70917aa6392827d1ccc8d85e1…

【Websim.ai】一句话让AI帮你生成一个网页

【Websim.ai】一句话让AI帮你生成一个网页 网站链接 websim.ai 简介 websim.ai接入了Claude Sonnet 3.5,GPT-4o等常用的LLM,只需要在websim.ai的官网指令栏中编写相关指令,有点类似大模型的Prompt,指令的好坏决定了网页生成的…

全网最全robotframework自动化测试环境搭建

一、前言 1、在2019年之前,robotframework-ride的版本一直是1.5.2.1,是2016年1月份的版本,只能安装在python2.7的环境上,导致如果想同时使用robotframework做测试且又需要python3环境编写python代码的小伙伴都需要在操作系统上安…

Open3D 计算去质心后的点云

目录 一、概述 1.1原理 1.2实现步骤 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2处理后点云 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、…

linux运维脚本编写

目录 步骤1 系统基本信息的检查 步骤2 文件系统和磁盘信息的检查 步骤3 内存、cpu、进程信息的检查 1、内存信息检查 2、cpu信息检查 3、进程信息检查 步骤4 其他脚本 正文部分✌ 步骤1 系统基本信息的检查 巡检脚本 步骤2 文件系统和磁盘信息的检查 具体实现的shell脚本如…

轻松实现远程智能交互:OriginBot与钉钉和GPT4o的集成指南

说明 我之前实现了简单UI来跟OriginBot交互,可以参考这里:古月居 - ROS机器人知识分享社区 但是由于我不是专业的前端开发,写UI还是比较耗时的,所以最近想修改一下这部分。 还有一个原因是,自己开发前端&#xff0c…

【嵌入式】前言

如今已经很少有产品不涉及到嵌入式,而把这种产品称为嵌入式系统的产品 嵌入式系统的特点就是软件、硬件可以裁切。 嵌入式未来发展趋势,网络化、节能化和智能化。 中国是嵌入式行业中重要的制造者和消费者,但我国还是有很多发展问题&#xf…

JAVA小白学习日记Day10

1.线程锁 使用Runnable接口和Lambda表达式: 在 EasyThreadA 类的 mainA 方法中,通过创建 Runnable 实例 run,并使用Lambda表达式。 EasyThreadA::method 绑定到 run 上。然后创建两个线程 a 和 b,分别启动它们,它们会…