位置: 编程技术 - 正文

cocos2dx3.2开发 RPG《Flighting》(五)只能行走的战斗场景(cocos2dx游戏开发)

编辑:rootadmin

推荐整理分享cocos2dx3.2开发 RPG《Flighting》(五)只能行走的战斗场景(cocos2dx游戏开发),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cocos游戏开发教程,cocos2d开发app,cocos2dx游戏开发,cocos2d-js游戏开发,cocos开发游戏,cocos2d开发app,cocos2dx游戏开发,cocos2dx游戏开发,内容如对您有帮助,希望把文章链接给更多的朋友!

一、前言

前面几节好像与我们一开始说的游戏不太相关,现在我们正式进入战斗场景的开发。

不过凡事不要心急,要循序渐进,我们先搭建一个能够让角色在上面行走的战斗场景吧。

二、正文

首先精简一下Role类,让他能够实现移动功能就好了。

顾名思义,role就是角色,在战斗场景出现的一个一个人都是一个role,废话不多说,直接贴上经过精简过得Role头文件

经过精简后,Role类就剩下这些函数和变量了,现在的这个Role类只能简单的移动。不要心急,那我们就先实现role的移动吧。

好的,先撇开我们精简过得Role类,先看我们的GameScene

GameScene.h

GameScene的两个接口setHeroTeam和setMonsterDeq在上一节的选人界面已经使用过了。GameScene也只是简单地将信息传递给layer层罢了。

下面主要研究FlightLayer

当然啦,这个FlightLayer也是被我精简过得。

这里需要注意的是,我们将Role**这个二级指针typedef为Role_Ptr,并不是一个新的类啊,至于为啥要用二级指针(其实改为用智能指针也行),等下我会好好说的。

好的开始好好讲FlightLayer的实现

init函数除了启动update和调用initListener函数之外没有其他特别的。initListener函数也只是为layer添加触摸事件监听器而已。大致的意思是:当有点击事件发生时,onTouchBegan方法被触发,遍历m_rolesArray,看哪个角色被选中(能够接受触摸事件),如果有角色被选中,就把触摸事件交给那个角色处理。

m_roleArray是一个Role_Ptr(Role**)的list,用于保存现在存活的role

那么为什么要用二级指针呢?

考虑以下问题:假设现在有两个角色,如果用一级指针的话,定义如下:

Role* A = Role::create();

Role* B = Role::create();

好了,现在A要攻击,攻击目标设置为B(所谓攻击目标就是一直向目标走去,要时刻检测目标的当前位置)

如何设置攻击目标?一级指针的话不就是在Role类里面加一个Role*类型的成员变量(Role* attackTarget)代表攻击目标就可以了吗。

好了,前提条件说完了,现在出现这样一种情况,A的攻击目标设置为B(A->attackTarget = B),这时候A会时刻检测自己的attackTarget的位置,并且不断地走过去。

但是,假如这个时刻B被C打死了。。那么这个时候B从场景中清除掉(调用removeFromParent)。那么A怎么知道B已经死了,被清除掉了呢?

聪明的同学可能会想:你判断一下A->attackTarget 是不是等于null不就可以了吗?但是很抱歉,cocos2dx里面,调用玩removeFromParent之后,原来那块中间在这一帧结束之前,并不不会置为null。也就是说B 进行remove后,A->attackTarget不等于null,那么有人又问了,你这里的m_rolesArray数组检测每一个role*(假设m_roleArray里面放入的是Role*而不是Role**),如果死了(Hp==0)就把它赋&#;为空,不可以吗?这个就是很经典的C语言关于&#;传递和地址传递的问题。你把m_rolesArray里面的临时变量置为null有什么用?m_rolesArray和A里面的attackTarget指针指向都是同一块空间(B的实际空间),但是两个是完全不同的变量,并不能说你把m_rolesArray的指针置为null,A的attackTarget也会变成null,二者是互不影响的。

cocos2dx3.2开发 RPG《Flighting》(五)只能行走的战斗场景(cocos2dx游戏开发)

好的,讲了那么多,大家可能会不懂。因为我这里也绕了很久。不过最后还是觉得很有必要理清楚,不懂的同学可以看一下《Effective C&#;&#;》里面介绍的RAII思想。

最后,补充一点是,最好用智能指针代替二级指针,这里我懒得修改了,不好意思哈。

貌&#;绕开了话题了,我们回到FlightLayer吧。

刚刚讲到有一个m_rolesArray的List负责保存在场景中还存活的角色。那么这个这些角色是什么时候放进去的呢?

对的,就是initTeam和initMonsterDeq这两个接口。这里的addRole是一个基本操作,负责在堆里面开一个区域存放Role的实体。

再回过头来看我们的三个触摸事件触发的回调函数。

这三个简化后的函数应该不难看懂。大概流程是这样的

1.onTouchBegan接受到触摸事件之后,检测m_rolesArray,看是否有Role被点中了,如果有m_cur_controlPtr 和 m_cur_control就设置好,然后把触摸事件交给m_cur_control(Role)处理。

2.onTouchMoved,没什么,也是依赖于m_cur_control的处理。

3.onTouchEnded,就是用来设置m_cur_control的终点的。

是不是兜兜转转又回到去了Role类,关于精简过的Role类我们还是标上注释吧。

其实先跟大家说,Role的行走主要还是依赖于update函数

再解释上面可能大家不太清楚的几个名词

1、xy的偏移量,因为我们用cocostudio做出来的骨骼动画可能范围和描点都不是和我们现在这个Role类(Node)完全重合的。所以可能要或多或少地调整一下骨骼动画的位置。

2、朝向。就是我们的角色是面向哪里的,有左右之分(true/false)

三个触摸回调函数实现在没有讲控制效果之前也就没什么的。除了onTouchBegan要根据传过来的触摸点判断是不是被点中。如果是,就返回true不是就返回false。

负责角色移动的还是要看update函数

讲一讲逻辑就可以了,就是不断更新Role的x和y,直到接近m_desPoint,要转身的时候就转身。

有两个函数 move()和stand() 其实是用来控制骨骼动画的。move负责播放跑步的动画,stand负责播放待机的动画

对了,好像Role的init函数还没有讲

很简单吧。。也没什么。

好吧,这节到此结束。

我的csdn地址:

【cocos2d-x】 EventListenerTouchAllAtOnce在IOS不可用的问题 第一次使用多点触摸,在ios真机上出现问题,而在android上跑却没问题,找了很久,问了很多人(竟然很多人不知道)...原因是在iOS中,苹果默认屏蔽掉

cocos2dx3.2开发 RPG《Flighting》(六)角色的状态和控制效果 一、前言一般来说,我们在做一个稍微有点智能的实体的时候都会用到状态机。这里我没有用到,但是我也为角色设置了几种状态。如果大家看了上一

[置顶] 用cocos2d-x 实现UV动画--实现篇 用cocos2d-x实现UV动画--实现篇UVSpriteuv动画是指通过在程序运行时动态改变纹理坐标,实现动态效果的纹理动画,使用uv动画可以实现水流动,火焰燃烧等

标签: cocos2dx游戏开发

本文链接地址:https://www.jiuchutong.com/biancheng/372656.html 转载请保留说明!

上一篇:cocos2dx3.2开发 RPG《Flighting》(四)预先加载与选人界面(cocos2d开发的知名游戏)

下一篇:【cocos2d-x】 EventListenerTouchAllAtOnce在IOS不可用的问题(cocos2dx4.0教程)

  • 保本理财增值税可以开票吗怎么开
  • 申报未抄税
  • 劳务派遣人员的工资计入什么科目
  • 个人对个人大额转账要什么资料
  • 购房尾款发票什么时候开
  • 办理外经证后缴税怎么交
  • 一般纳税人所得税优惠政策最新2022
  • 公司的旅游费怎么处理
  • 个人房屋租金收入怎么交税
  • 非福利企业残疾人用工优惠
  • 企业增加注册资金怎么办理
  • 全资子公司改为独立公司
  • 增值税普票没有校验码
  • 帮客户代付保证金违法吗
  • 消费税征收环节下划的影响
  • 建筑劳务有哪些税种
  • 企业给员工的异地安家费交个税吗?
  • 汇算清缴应纳税所得额5万要交多少税
  • 应交税费应交增值税的三级科目有哪些
  • 无票收入有哪些情况抖音
  • 开票时税收编码必须和进项一致吗
  • 一般纳税人能否享受残保金优惠
  • 普票丢失的最新处理2019
  • 酒店的床和沙发哪个好
  • 个税申报工资比实际工资高,汇算清缴时能退吗
  • 财务管理和会计学哪个好就业
  • 差旅费中的车票可以抵扣进项税吗
  • 销售商品抹零需要怎么入账
  • 员工迟到扣工资的会计处理
  • linux常用的命令大全
  • 个人与公司交易超过20万
  • 调整之前的凭证怎么删除
  • 企业所得税分析方法
  • 填制的凭证内容有哪些
  • 挪威有鹿吗
  • php写一个简单的单例模式
  • 固定资产属于资产要素吗
  • 跨年庆典中燃放的歌曲
  • PHP jQuery+Ajax结合写批量删除功能
  • 头歌HTML基础第一关初识HTML
  • 未税收入怎么做分录
  • 公司设备搬家费会计分录
  • stat 命令
  • 旅游公司差额征税税率是5%
  • layui 树形
  • 零申报的公司有财务报表吗
  • 房地产股权转让涉及哪些税费
  • 预收账款包括哪些内容具体明细
  • 生产型企业可以买进就卖出吗
  • db2 deadlock
  • 公司购入的发明产品
  • 增值税扣税凭证进项税额转出情况核实函
  • 母公司与子公司内部合作协议
  • mongodb operator
  • 企业所得税的计提
  • 公司买的吃的计入什么科目
  • 什么税能计入税额
  • 营改增后预交营业税怎么处理
  • 青苗赔偿规定
  • 车子购买的保险
  • 小规模纳税人收到专票后如何处理
  • 新开的公司税务那边要办什么
  • 不属于投资性房地产项目有自用房地产作为存货的
  • 公司开业之前产假怎么算
  • 租赁办公楼
  • 在docker中使用service命令
  • win8怎么让我的电脑显示在桌面上
  • 电脑bios怎么分区
  • xp系统有什么用
  • windows无法完成配置若要尝试恢复配置
  • 苹果mac怎样
  • win10系统如何删除用户账户
  • perl写文件
  • 有道词典下载安装
  • android 自定义linearlayout 宽度计算不对
  • 广告轮播图片素材
  • python二叉树的遍历算法
  • androidsdk的计算机
  • 车票进项税怎么认证
  • 所得税季度预缴申报表怎样填写
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设