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(化名)是一个专为团队管理和项目协作而设计的强大平台。它提供了用于管理用户、项目和权限的综合工具。…

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

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

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

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

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

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

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

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

Redis集群启动步骤

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

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

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

刷题了: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脚本如…

NebulaGraph图数据库使用教程

一、NebulaGraph 是什么? NebulaGraph 是一款开源的图数据库,擅长处理千亿个顶点和万亿条边的超大规模数据集。 NebulaGraph 社区已成长为一个荟聚了众多用户、融合了各类图技术场景实践知识的活跃开源社区。你可以在其中与大家共同交流 NebulaGraph 周…

音视频开发入门很难?可能是你姿势不对

作为程序员,听到最烦的两个词一个是bug,在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「音视频开发的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大…

【书生大模型实战】L1-书生大模型全链路开源体系

一、关卡任务 观看本关卡视频后,写一篇关于书生大模型全链路开源开放体系的笔记。 视频链接:【书生浦语大模型全链路开源体系】 https://www.bilibili.com/video/BV1Vx421X72D/?share_sourcecopy_web 二、实验过程 书生浦语大模型全链路开源体系&am…

银行贷款信用评分不足?大数据帮你找回失去的“分”

在这个信息爆炸的时代,无论是个人还是企业,数据都成为了衡量信用和评估风险的重要依据。贷款、融资、求职甚至是日常消费,都可能因为一份好的数据报告而变得更加顺畅。那么,如何高效地查询自己的大数据,面对评分不足时…

【持续集成_02课_Jenkins+Git+Gogs综合应用】

https://www.cnblogs.com/xfeiyun/p/17510472.html Jenkins部署及持续集成——傻瓜式教程-腾讯云开发者社区-腾讯云 一、Jenkins安装 Jenkins由Java语言编写而成,安装包即是一个war包。因此,Jenkins的运行启动依赖于Java环境,同时&#xf…

G120 EPos配置方案及应用场景

EPos功能就是基本定位器功能,它可计算出轴的运行特性,使轴以时间最佳的方式移动到目标位置。EPos功能主要包括:设定值 直接给定(MDI)功能、 选择程序段功能、回参考点功能、点动功能、运行到固定挡块功能。 EPos功能通过处理给定的加速度、速度和位置值生成运行特性曲线,…

昇思 25 天学习打卡营第 15 天 | mindspore 实现 VisionTransformer 图像分类

1. 背景: 使用 mindspore 学习神经网络,打卡第 15 天;主要内容也依据 mindspore 的学习记录。 2. Vision Transformer 介绍: mindspore 实现 VisionTransformer 图像分类;VisionTransformer 论文地址 VisionTransfo…

Redis是多线程还是单线程?

文章目录 1、用户态和内核态2、阻塞IO3、非阻塞IO4、IO多路复用4.1 select4.2 poll4.3 epoll4.4 epoll中的ET和LT4.5 epoll的服务端流程 5、信号驱动6、异步IO7、对比8、Redis是单线程的吗?9、单线程多线程网络模型变更 1、用户态和内核态 1、ubuntu和Centos 都是Li…