一文教你实现「飞机大战」里战机的控制逻辑

?

纵版射击游戏是一种比较经典的游戏类型,从早期的红白机平台到如今的手机平台,一直都有非常经典的游戏作品。纵版射击游戏只需要控制飞行器躲避敌机和子弹并攻击敌机,玩法和操作都非常简单,因此很适合移动平台上的操作。曾经微信平台红极一时的「飞机大战」相信每个人都玩过,那么今天就来教大家如何实现游戏里战机的控制逻辑。

1.首先创建一个游戏场景 GameScene,在场景中添加游戏背景和今天的主角——战斗机:

2.接下来创建战斗机的控制脚本 GamePlane.js:

3.创建成功后就可以进行编辑了,战斗机的控制方式分为两种:一种是按住屏幕任意位置实现战斗机拖动;另外一种是只有按住战斗机节点才能实现战斗机拖动。如果想按住屏幕任意位置实现战斗机拖动,则注册战斗机父节点的 touch 事件监听;如果想只有按住战斗机节点才能实现战斗机拖动,则注册战斗机节点的 touch 事件监听。本例为第一种实现方式,第二种去掉 .parent 即可:

/** * GamePlane.js */?cc.Class({    extends: cc.Component,?    properties: {?    },?    // LIFE-CYCLE CALLBACKS:?    onLoad() {        /**         * 如果想按住屏幕任意位置实现战斗机拖动,则注册战斗机父节点的 touch 事件监听;         * 如果想只有按住战斗机节点才能实现战斗机拖动,则注册战斗机节点的 touch 事件监听。         * 本例为第一种实现方式,第二种去掉 .parent 即可。         */        this.node.parent.on(cc.Node.EventType.TOUCH_MOVE, this.touchMoveCallBack, this);    },?    start() {?    },?    // update (dt) {},?    // TouchMove 回调函数    touchMoveCallBack: function (event) {        console.log("touchMoveCallBack.");?        let rangePos = event.getDelta();    // 获取位置变化?        this.node.x += rangePos.x;        this.node.y += rangePos.y;?        // 控制飞机节点不能移动出屏幕        let minX = -this.node.parent.width/2 + this.node.width/2;    // 最小X坐标        let maxX = Math.abs(minX);    // 最大X坐标        let minY = -this.node.parent.height/2 + this.node.height/2;    // 最小Y坐标        let maxY = Math.abs(minY);    // 最大y坐标        let currentPos = this.node.getPosition();?        if (currentPos.x < minX) {            currentPos.x = minX;        }else if (currentPos.x > maxX) {            currentPos.x = maxX;        }else if (currentPos.y < minY) {            currentPos.y = minY;        }else if (currentPos.y > maxY) {            currentPos.y = maxY;        }?        this.node.setPosition(currentPos);      },});

4.接下来将编辑好的脚本挂载到战斗机节点上就可以预览了:

可以看到就算没有按住战斗机节点也可以实现战斗机的拖动,且不会超出屏幕的范围,感兴趣的小伙伴赶快来试试吧!



我是「Super于」,立志做一个每天都有正反馈的人!

原文地址:https://www.cnblogs.com/yu97271486/p/11302461.html

时间: 2024-10-11 20:21:39

一文教你实现「飞机大战」里战机的控制逻辑的相关文章

深度 | 邢波教授谈人工智能科学路径:为人工智能装上「无穷动」引擎

深度 | 邢波教授谈人工智能科学路径:为人工智能装上「无穷动」引擎 本文由邢波教授 授权转载 微信公众号:猫匣子 作者:邢波 有些人是因为对人工智能的原理不理解而导致,有些人是为了个人名望而宣扬人工智能威胁论,有些人则是为了商业的利益推动人工智能威胁论.——Yann LeCun   人工智能算法本身这个计算任务像登山,它是有明确的目标的,可以用数学描述和比较的目标,它本身有弹性.容错性.随机性.和客观的量化的可评估性 … 人工智能功能的提升和突破来源于理论模型,算法,和计算引擎的不断创新,缺一不

Loj #3085. 「GXOI / GZOI2019」特技飞行

Loj #3085. 「GXOI / GZOI2019」特技飞行 题目描述 公元 \(9012\) 年,Z 市的航空基地计划举行一场特技飞行表演.表演的场地可以看作一个二维平面直角坐标系,其中横坐标代表着水平位置,纵坐标代表着飞行高度. 在最初的计划中,这 \(n\) 架飞机首先会飞行到起点 \(x = x_{st}\) 处,其中第 \(i\) 架飞机在起点处的高度为 \(y_{i,0}\).它们的目标是终点 \(x = x_{ed}\) 处,其中第 \(i\) 架飞机在终点处的高度应为 \(y

怎样将「插件化」接入到项目之中?

本期移动开发精英社群讨论的主题是「插件化」,上网查了一下,发现一篇 CSDN 博主写的文章<Android 使用动态载入框架DL进行插件化开发>.此处引用原作者的话: 随着应用的不断迭代,应用的体积不断增大,项目越来越臃肿,冗余添加.项目新功能的加入,无法确定与用户匹配性,发生严重异常往往牵一发而动全身,仅仅能紧急公布补丁版本号,强制用户进行更新.结果频繁的更新.反而easy减少用户使用黏性,或者是公司业务的不断发展,同系的应用越来越多,传统方式须要通过用户量最大的主项目进行引导下载并安装.

「C语言」常量和变量的表示及应用

先发布,还在修改完善中.. 在程序运行中,其值不能改变的量成为常量.在基本数据类型中,常量可分为整型常量.实型常量.符号常量和字符型常量(包括字符常量和字符串常量),现分别介绍如下: 整型常量 即整常数,由一个或多个数字组成,可以带正负号 C语言中整型常量可用十进制.八进制和十六进制3种形式表示 十进制整数:由0~9数字组成,不能以0开始,没有前缀 八进制整数:以0为前缀,其后由0~7的数字组成,没有小数部分 十六进制整数:以0x或0X开头,其后由0~9的数字和a~f(或A~F字母组成) 另外长

基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(下)

在飞机大战游戏开发中遇到的问题和解决方法: 1.在添加菜单时,我要添加一个有背景的菜单,需要在菜单pMenu中添加一个图片精灵,结果编译过了但是运行出错,如下图: 查了很多资料,调试了很长时间,整个人都要崩溃了. 最后发现引擎中CCMenu::itemForTouch函数中有遍历子节点的行为,但是循环中没有判断子节点类型是否为CCMenuItem.如图:码,这样一来,加入到pMenu中的图片精灵被当作菜单项取了出来使用,导致报错.老版本的果然又不完善的地方,整个人都不好了...果断修改引擎里的源

安卓飞机大战(二) SurfaceView实现自制背景

用SurfaceView写一个自制的背景图,并且可以移动,加上安卓飞机大战(一)中的BackgroundManager类,可以直接使用 GameView代码: public class GameView extends SurfaceView implements SurfaceHolder.Callback,Runnable{    private SurfaceHolder hd=null;    private Canvas canvas=null;    private Backgrou

android:“新版飞机大战”源代码开源啦!

今天10.24,为了纪念程序员的节日,把之前写过的一个"飞机大战"的一个源代码开源了. 源代码地址:https://github.com/nuptboyzhb/newplanegame 豌豆荚Demo:http://www.wandoujia.com/apps/edu.njupt.zhb.planegame 截图: ------------------------------------------------------------------- 更多交流,Android开发联盟QQ

android:如何用一天时间,写出“飞机大战”这样的游戏!(无框架-SurfaceView绘制)

序言作为一个android开发者,时常想开发一个小游戏娱乐一下大家,今天就说说,我是怎么样一天写出一个简单的"飞机大战"的.体验地址:http://www.wandoujia.com/apps/edu.njupt.zhb.planegame游戏分析玩过"飞机大战"游戏的都知道,飞机大战中的主要"角色"有:1.玩家飞机2.敌方飞机3.玩家飞机发送的子弹4.敌方Boss飞机发送的子弹我们需要控制的有:1.绘制屏幕内的角色2.控制角色的逻辑,比如:敌方

Chrome 扩展 Stylish :给不喜欢某个网站一键「换肤」

原文地址:http://whosmall.com/?post=419 本文标签: Chrome扩展 Chrome浏览器 Chrome插件 Chrome扩展Stylish Stylish是什么 Stylish 是什么? 开门见山,Stylish 的作用是,它可以把百度首页变成这样: 它还能把知乎「拍扁」,让微博网页版变得简洁无比,让 Feedly 用上Material Design-- 这个神奇的 Stylish实际上是一个浏览器插件,适用于 Chrome,Firefox,Opera 以及 Saf