时隔3年,我又开始继续写这个系列的帖子了,也不知道是会写完全系列,还是再次夭折。

废话不多。直接开始主题了

主要实现的功能点包含这些内容:通过摇杆控制角色进行八方位移动,并按照各方位播放对应移动动画

效果图如下:



本次案例其实都是拼凑网上别人的一些现成代码,然后进行整合梳理

涉及到的相关内容如下:

参考代码如下:

1.Cocos Creator 地图滚动&摄像机人物跟随

地址:https://www.bilibili.com/video/BV1et411J7iC

2.joystick摇杆控件

代码地址:https://github.com/YunYouJun/cocos-creator-joystick

在线演示:https://www.yunyoujun.cn/cocos-creator-joystick/

3. Animation动画创建

教程地址:http://www.cocoachina.com/bbs/read.php?tid-458312.html

我其实也只是代码的搬运工,通过对以上三部分的整合,最终就实现了我想要的效果。

开始介绍项目

场景结构



场景中分别包含了以下控件:

  • MainCamera 负责绘制UI
  • RoleCamera 负责绘制角色(之后的遥感其实也是控制这个摄像头的坐标移动)
  • MapView 地图(里面包含了一些地图相关的内容,在参考代码里面的视频有做解释,我这里不做详细介绍了)
  • Role 主角,主要的控件,相关的控制代码都挂在主角上面
  • joystick 摇杆控件,该部分代码可以直接通过参考代码2去下载,然后直接使用即可。

代码结构



其实需要讲解的代码也就两部分:joystick.js 与Role.JS

Joystick组件

属性(Properties)

  • dot :摇杆操纵点
  • ring :摇杆背景节点
  • joystickType :触摸类型(跟随,固定两种)
  • directionType :方向类型(4方向,8方向,全方位)
  • _stickPos :摇杆所在位置
  • _touchLocation :触摸位置

函数(Functions)

  • _initTouchEvent : 初始化
  • _onChangeJoystickType : 更改触摸类型
  • _touchStartEvent : 当手指按下时触发,判断触摸类型,并根据触摸类型执行相应动作
  • _touchMoveEvent : 当手指按住摇杆控件时持续触发,先判断按下的位置是否相同,如果相同,则不做处理。
  • _touchEndEvent : 当手指抬起时触发,结束相关动作

Role组件

主要函数(Functions)

  • _updateCameraPosition :更新摄像机位置
  • _getTilePos : 计算摇杆角度
  • onTouchMove : 按住摇杆时持续触发

  • getCalculaAngle : 将摇杆移动的坐标进行角度转换,转换之后用来判断朝哪个方向移动了

  • getfwinfo : 根据角度判断角色应该朝哪个方向

  • move : 移动摄像头

  • update :

主要逻辑顺序

当用户按住摇杆时触发onTouchMove 事件,判断移动方向,切换角色动画。

最后就是贴代码了

链接:https://share.weiyun.com/8WRBYpR5 密码:jny2wj

CocosCreator游戏开发(四)实现摇杆控制角色功能的更多相关文章

  1. CocosCreator游戏开发---菜鸟学习之路(一)

    PS(废话): 辞职后在家好久好久了,久到经济不允许了,接着就准备再次出去找工作了,然而工作哪有那么好找,特别是像我这种菜鸟.而且我还准备转行,准备去做游戏,技能等级接近于0,那工作就更难找了.既然如 ...

  2. 喵的Unity游戏开发之路 - 玩家控制下的球的滑动

  3. CocosCreator游戏开发(五)实现技能按钮

    在上一篇中,已经顺利的实现了通过摇杆控件来控制角色移动的例子 这一篇内容中,主要来实现通过摇杆来操作技能施法位置的功能 代码效果如下: 在最初的想法中,我是想将摇杆与技能施法范围以及施法位置做成一个组 ...

  4. Unity3D 游戏开发构架篇 ——输入控制

    临近毕业之初.进入Unity3D这个行业,是一家小工作室.老板人非常不错,公司氛围也非常单纯.近期公司开发一款小游戏,初次上手,颇多周折,记录下自己的开发心得.主要涉及一些设计理念,互相交流. 先说下 ...

  5. CocosCreator游戏开发---菜鸟学习之路(二)SocketIO简易教程

    请先参考教程司令部-SocketIO教程进行相关操作 开发完成后部分用户会出现持续输出 a userConnected的BUG 如下图所示 经过一段时间的BUG检查终于发现了问题所在.每个人碰到的情况 ...

  6. CocosCreator游戏开发---菜鸟学习之路(三)如何在CocosCreator中使用Pomelo

    PS(废话): 这段时间都在研究网易的Pomelo框架,作为新手小白,自然遇到了不少坑爹的事情.(当然也有可能是因为自己技术不过关的原因所以导致在很多基础的问题上纠结了很久.)网上也搜索了好久,但是基 ...

  7. [Unity3D]Unity3D圣骑士模仿游戏开发传仙灵达到当局岛

    大家好,我是秦培.欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 在前面的文章中.我们分别实现了一个自己定义的角色控制器<[Unity3D]Unity3D游戏开 ...

  8. 整理了一下浅墨大神的Visual C++/DirectX 9.0c的游戏开发手记

    还是非常棒的博客,只是没有一个文件夹.所以自己做了一个山寨文件夹在这里.便于随时查找. 前面31期从略. [Visual C++]游戏开发笔记三十二 浅墨DirectX提高班之中的一个 DirectX ...

  9. [Android游戏开发]游戏框架的搭建

    通常情况下,游戏开发的基本框架中,一般包括以下模块: 窗口管理(Window management):该模块负责在Android平台上创建.运行.暂停.恢复游戏界面等功能. 输入模块(Input):该 ...

随机推荐

  1. shell动态向sql传参

    一直在想有什么好方法可以实现,用shell动态给sql传参,自己写了一个简单,有什么好方法,欢迎留言补充,下面代码纯手打,可能有疏忽之处,请大佬批评指正指正. 实现方法如下: 1.新建一个文件02.t ...

  2. Python os.tcgetpgrp() 方法

    概述 os.tcgetpgrp() 方法用于回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组.高佣联盟 www.cgewang.com 语法 tcgetpgrp()方法语法格 ...

  3. PHP fseek() 函数

    定义和用法 fseek() 函数在打开的文件中定位. 该函数把文件指针从当前位置向前或向后移动到新的位置,新位置从文件头开始以字节数度量. 如果成功该函数返回 0,如果失败则返回 -1.请注意,移动到 ...

  4. PHP fread() 函数

    定义和用法 fread() 函数读取打开的文件. 函数会在到达指定长度或读到文件末尾(EOF)时(以先到者为准),停止运行. 该函数返回读取的字符串,如果失败则返回 FALSE. 语法 string ...

  5. pagehelper的使用和一些坑!

    [toc] ##1.1 pagehelper介绍和使用 PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件. 原本以为分页插件,应该是很简单的,然而PageHelper比我想象 ...

  6. 2020牛客暑期多校训练营 第二场 J Just Shuffle 置换 群论

    LINK:Just Shuffle 比较怂群论 因为没怎么学过 置换也是刚理解. 这道题是 已知一个置换\(A\)求一个置换P 两个置换的关键为\(P^k=A\) 且k是一个大质数. 做法是李指导教我 ...

  7. bzoj 2780 [Spoj]8093 Sevenk Love Oimaster

    LINK:Sevenk Love Oimaster 询问一个模式串在多少个文本串中出现过. 考虑广义SAM 统计这种数量问题一般有三种做法. 一种 暴力bitset 这道题可能可以过? 一种 暴力跳p ...

  8. Linux的VMWare中Centos7文件系统挂载和开启网卡及简单命令

    一.路径 挂载磁盘/etc/fastab  开启网卡 vi .bash_profile              ---更改PATH环境变量 可设置 mysql提示符 cd  /etc/yum.rep ...

  9. MySQL主从同步-原理&实践篇

    来源:Onegoleya 简栈文化 什么是mysql的主从复制? MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点.MySQL 默认采用异步复制方式,这样从节点 ...

  10. Spring与Mybatis整合占位符无法解析问题

    问题:写了一个新的dao接口,进行单元测试时提示: Initialization of bean failed; nested exception is org.springframework.bea ...