Cocos Creator | 飞刀大乱斗开发教程系列(三)
预览效果
具体内容
■ 这一期,主要讲解游戏过程中,通过触摸滑动,控制人物的运动方向,以及游戏过程中,人物运动区域的控制。如下图,人物通过滑动控制运动方向,即是往哪个方向滑动,人物就往哪个方向移动。人物只限定在下图蓝色边界内运动。
边界的实现
■ 游戏运动区域使用一张背景图,精灵修改成 TILED 模式,根据需要,可以修改背景的大小,改变整个游戏的区域,边界使用一张边界纹理,同样使用 TILED 模式,进行翻转、修改大小、调整位置,以达到上述界面效果。
■ 所有玩家的人物,都放到背景下的一个铺满父节点的根节点上。之所以没有直接放到背景节点上,是为了便于管理所有玩家的人物角色。
■ 人物上下左右边界的最大最小值,可以在界面上拖动人物,获取最佳可见的位置信息,在脚本内,记录下来,后面控制人物运动时,作为临界值使用。
触摸事件监听
■ 游戏过程中,人物是在游戏区域内,全图可以运动的,所以事件的监听,需要放到大地图上,如本案例,就可以挂在到背景图或人物根节点上,我选择的是挂载到背景节点上。
■ 需要监听 TOUCH_START、TOUCH_MOVE、TOUCH_END、TOUCH_CANCEL 四个事件,考虑到移动过程中,移动幅度的大小会影响游戏体验,我这里控制了一个变化值,当上一次到下一次的变化值超过 5 时,才按照偏移量计算运动的方向。
■ 如上图,会保留一个变量存储上一次的位置,当移动的偏移量达到预设值 5 时,修改人物的运动方向,更新下一次的起始变量。人物的运动方向,计算变化的向量和 (0,1) 向量的夹角即可。
■ 使用 Vec2 的 signAngle 能很方便的计算出两个向量的角度(弧度),人物的运动方向,就是根据这个弧度进行控制。
运动方向控制
■ 游戏过程中,手指按下屏幕,人物处于进攻状态,松开手指,人物处于防守状态,防守状态下的人物,是不能移动的。在计算人物移动位置时,就需要人物在进攻状态下,才可以生效。下图上边是防守状态,下边是进攻状态。
■ 位置的计算,也是根据上一步中设置的变化角度,计算下一步的运动位置,在人物的 update 函数内,动态更新人物的下一个位置。假设变化的偏移量是 offset,变化的角度是 angle(弧度表示),节点当前的位置是(x,y),下一步的位置(next_x,next_y)计算就是:
next_x = x + offset * sin(angle);
next_y = y + offset * cos(angle);
■ 再判断 next_x 和 next_y 的合法性,如果验证通过,人物的下一个位置就是(next_x, next_y)。
边界的控制
■ 上一步中,计算完人物的下个位置,需要判断是否超过上下左右的边界,在超过时,调整位置,最后直接更新人物位置即可。
■ 游戏一开始,根据配置,加载多个人物到人物的根节点上,记录下玩家自己的节点,人物的运动逻辑,按照上述步骤控制,就可以实现屏幕中多个人物同时游戏的效果。
Cocos Creator | 飞刀大乱斗开发教程系列(三)的更多相关文章
- Cocos Creator | 飞刀大乱斗开发教程系列(二)
预览效果 具体内容 ■ 这一期,主要讲解主页中间人物效果的实现.也就是,在下方列表选择不同人物,上方显示不同的人物,播放不同的效果,即下图的效果实现,此部分也是采用预制 Prefab 进行实现. 英雄 ...
- Cocos Creator | 飞刀大乱斗开发教程系列(一)
预览效果 具体内容 ■ 这一期,主要讲解主页下方列表选项如何实现.也就是游戏开始后,加载所有现有的英雄列表,这一功能的实现,如下图部分. ■ 列表使用 ScrollView 实现,横向滚动,设置好上下 ...
- cocos creator策略类手游开发教程
目录 大小6.83GB,Mp4格式,语言:中文 扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop135452397.taobao.com/ 联系店主
- GridView的 PreRender事件与 RowCreated、RowDataBound事件大乱斗
GridView的 PreRender事件与 RowCreated.RowDataBound事件大乱斗 之前写了几个范例,做了GridView的 PreRender事件与 RowCreated.Row ...
- python红蓝英雄大乱斗(面向对象实现)
红蓝英雄大乱斗 游戏规则 ''' 有红蓝两方英雄(可自定义个数) 随机一方英雄使用随机攻击方式攻击另一方英雄,任意一方英雄全部阵亡则游戏结束 每个英雄有 名字.生命值.普通攻击.Q技能攻击.W技能攻击 ...
- EnjoyingSoft之Mule ESB开发教程第三篇:Mule message structure - Mule message结构
目录 1. 探索Mule Message结构 2. Mule Message的Payload 3. Mule Message的Property 4. Mule Message的Attachment 5 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证
要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方 ...
- NeuChar 平台使用及开发教程(三):使用 NeuChar 的菜单服务
上一篇<NeuChar 平台使用及开发教程(二):设置平台账号>我们已经完成了平台账号的设置,下面就马上来体验一下自定义菜单的设置吧! 进入某个 Neural Cell 的设置界面,在右侧 ...
- iOS 11开发教程(三)运行第一个iOS 11程序
iOS 11开发教程(三)运行第一个iOS 11程序 运行iOS11程序 创建好项目之后,就可以运行这个项目中的程序了.单击运行按钮,如果程序没有任何问题的话,会看到如图1.6和1.7的运行效果. 图 ...
随机推荐
- H3C 帧中继协议栈
- uni-app学习记录04-轮播图和滑屏图片
<template> <view> <!-- 轮播图视图 swiper-item是每页的元素 --> <swiper :indicator-dots=&quo ...
- hadoop的6个进程启动不全,请试 比如datanode没有启动
赋给hadoop用户hadoop-1.2.1读写权限 [root@master usr]# chown -R hadoop121:hadoop121 hadoop-1.2.1/ 折腾了两个小时 ...
- Spring security用户URL权限之FilterSecurityInterceptor
总: 用户通过浏览器发送URL地址,由FilterSecurityInterceptor判断是否具有相应的访问权限. 对于用户请求的方法权限,例如注解@PreAuthorize("hasRo ...
- Python--day38---进程间通信--初识队列(multiprocess.Queue)
初识队列: 进程间通信IPC(Inter-Process Communication) 1,队列的方法: q = Queue(5)1,q.put(1) #把1放进队列 2,print(q.full() ...
- 【js】vue 2.5.1 源码学习(二) 策略合并
一. 整体思路 1 首先是代码的大体构造,先判断引入代码的环境,即对应amd 和cmd的处理 2 vue_init 需要借助 initMinxin ==>>> ...
- QuartusII 13.0的完美破解
网络上破解QuartusII 13.0软件的方法都不行,最后经过本人总结测试(独创),最终实现了QuartusII 13.0的破解,破解方法如下: 网上常规操作之后,会得到一个“license.dat ...
- ES6/ES7/ES8新特性
ES6 变量的改变 let const 2. 字符串新增方法 let str = 'react'; str.includes('re') // true str.repeat(3) // reactr ...
- 网上做题随笔--MySql
网上写写题 提高下自己的能力. Mysql平时写的是真的很少,所以训练一下下. 1.查找重复的电子邮箱 https://leetcode-cn.com/problems/duplicate-email ...
- windows编译caffe2遇到的问题
首先介绍下window编译caffe2整体流程: 说明:如果不需要python支持只需3.4即可,而且编译亦不会出现问题. 1. 安装python2.7,. 我使用的是anaconda python2 ...