预览效果 ​

具体内容

■ 这一期,主要讲解游戏过程中,通过触摸滑动,控制人物的运动方向,以及游戏过程中,人物运动区域的控制。如下图,人物通过滑动控制运动方向,即是往哪个方向滑动,人物就往哪个方向移动。人物只限定在下图蓝色边界内运动。

边界的实现

■ 游戏运动区域使用一张背景图,精灵修改成 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 | 飞刀大乱斗开发教程系列(三)的更多相关文章

  1. Cocos Creator | 飞刀大乱斗开发教程系列(二)

    预览效果 具体内容 ■ 这一期,主要讲解主页中间人物效果的实现.也就是,在下方列表选择不同人物,上方显示不同的人物,播放不同的效果,即下图的效果实现,此部分也是采用预制 Prefab 进行实现. 英雄 ...

  2. Cocos Creator | 飞刀大乱斗开发教程系列(一)

    预览效果 具体内容 ■ 这一期,主要讲解主页下方列表选项如何实现.也就是游戏开始后,加载所有现有的英雄列表,这一功能的实现,如下图部分. ■ 列表使用 ScrollView 实现,横向滚动,设置好上下 ...

  3. cocos creator策略类手游开发教程

    目录 大小6.83GB,Mp4格式,语言:中文 扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop135452397.taobao.com/ 联系店主

  4. GridView的 PreRender事件与 RowCreated、RowDataBound事件大乱斗

    GridView的 PreRender事件与 RowCreated.RowDataBound事件大乱斗 之前写了几个范例,做了GridView的 PreRender事件与 RowCreated.Row ...

  5. python红蓝英雄大乱斗(面向对象实现)

    红蓝英雄大乱斗 游戏规则 ''' 有红蓝两方英雄(可自定义个数) 随机一方英雄使用随机攻击方式攻击另一方英雄,任意一方英雄全部阵亡则游戏结束 每个英雄有 名字.生命值.普通攻击.Q技能攻击.W技能攻击 ...

  6. EnjoyingSoft之Mule ESB开发教程第三篇:Mule message structure - Mule message结构

    目录 1. 探索Mule Message结构 2. Mule Message的Payload 3. Mule Message的Property 4. Mule Message的Attachment 5 ...

  7. Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

    要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方 ...

  8. NeuChar 平台使用及开发教程(三):使用 NeuChar 的菜单服务

    上一篇<NeuChar 平台使用及开发教程(二):设置平台账号>我们已经完成了平台账号的设置,下面就马上来体验一下自定义菜单的设置吧! 进入某个 Neural Cell 的设置界面,在右侧 ...

  9. iOS 11开发教程(三)运行第一个iOS 11程序

    iOS 11开发教程(三)运行第一个iOS 11程序 运行iOS11程序 创建好项目之后,就可以运行这个项目中的程序了.单击运行按钮,如果程序没有任何问题的话,会看到如图1.6和1.7的运行效果. 图 ...

随机推荐

  1. poj 3528 Ultimate Weapon (3D Convex Hull)

    3528 -- Ultimate Weapon 一道三维凸包的题目,题目要求求出三维凸包的表面积.看懂了网上的三维凸包的代码以后,自己写的代码,跟网上的模板有所不同.调了一个晚上,结果发现错的只是数组 ...

  2. Laravel5使用ElasticSearch

    https://blog.csdn.net/qq_16829085/article/details/80725125 安装elasticsearch和ik插件 (elasticsearch的使用需要配 ...

  3. PL/SQL语言的学习笔记

    一.PL/SQL简介1.什么是PL/SQL程序?(PL/SQL是对SQL语言的一个扩展,从而形成的一个语言) 2.PL/SQL语言的特点(操作Orcale数据库效率最高的就是PL/SQL语言,而不是C ...

  4. 2018-8-10-win10-uwp-获得元素绝对坐标

    title author date CreateTime categories win10 uwp 获得元素绝对坐标 lindexi 2018-08-10 19:16:51 +0800 2018-2- ...

  5. vue 打包后,页面空白及图片路径的问题

    打包之后打开dist的页面显示空白: 1.记得改一下config下面的index.js中bulid模块导出的路径. 这里需要将 assetsPublicPath: '/'改为assetsPublicP ...

  6. [学习笔记]k短路

    A*:我已经忘了怎么写了,反正n=30,m=1000都能卡掉... 正解:可持久化左偏树+堆维护可能集合 原论文:http://www.docin.com/p-1387370338.html 概括: ...

  7. Spring Boot实战之单元测试

    Spring Boot实战之单元测试 本文介绍使用Spring测试框架提供的MockMvc对象,对Restful API进行单元测试 Spring测试框架提供MockMvc对象,可以在不需要客户端-服 ...

  8. 【t056】智力问答(链表+计数排序做法)

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 新年联欢会上,G.Sha负责组织智力问答节目.G.Sha建立了一个很大很大的超级题库,并衡量了每道题的 ...

  9. 遍历$.map和$.each

    <body> <p style="color:red;"><b>Values: </b></p> <form> ...

  10. TOJ4587:抓苹果(DP)

    传送门:抓苹果 dp(i,j) = max(dp(i-1,j-1),dp(i-1,j))+当i这分钟时能否刚好移动到这棵树下. 初始化是对不移动的情况下. 代码 #include<bits/st ...