加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d-x游戏实例(12)-实时拖动主角移动

发布时间:2020-12-14 21:45:01 所属栏目:百科 来源:网络整理
导读:小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man 上一篇讲解了记录拖动的路径并使主角按照此路径移动的 cocos2d-x 实现。这篇讲解另一个操作方式,这种方式在纵版射击游戏中有不少的实现,就

小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man

上一篇讲解了记录拖动的路径并使主角按照此路径移动的cocos2d-x实现。这篇讲解另一个操作方式,这种方式在纵版射击游戏中有不少的实现,就是触屏拖动主角实时移动,也就是说没有上一节那个记录路径然后主角再移动的过程,主角是随你的手指移动的,之后的例子里我也将完整的实现一个简单的纵版射击游戏,就采用这种操作方式。

和上一篇一样,我们也要实现如下三个函数:

virtualvoidccTouchesBegan(CCSet*pTouches,CCEvent*pEvent);

virtualvoidccTouchesMoved(CCSet*pTouches,85); font-family:'microsoft yahei'; font-size:15px; line-height:35px"> virtualvoidccTouchesEnded(CCSet*pTouches,85); font-family:'microsoft yahei'; font-size:15px; line-height:35px"> 这个实现起来比上一篇的问题要简单,但是我们要实现一个小算法,就是,我们检测我们的触电在主角的矩形范围内的一个点,那我们的触点不一定在主角的锚点上,这样我们不能直接用触点直接设置主角的位置,我们需要处理一下,见下图


如图p点是我们的触点,a点是我们的锚点,我们只要满足一下公式:

Px-Ax=dx,Py-Ay=dy就可以了。

首先来看ccTouchesBegan的实现:


首先还是获得触点,然后我们就要获得主角位置,和上次的程序一样,主角还是绑定在地图上的,所以我们要获得主角的绝对坐标,然后判断触点是否在主角这个矩形范围内,如果在范围内,我们把索引值设置为-5-5表示起始点有效,-1表示起始点无效,然后我们就通过刚才那个公式获得dxdy(也就是xdeltaydelta)。

再来看ccTouchesMoved的实现:


如果索引值为-5,那表示我们就可以控制主角了,然后我们要判断触点是否在屏幕范围内,如果在屏幕范围内,再判断这个位置是否和主角当前位置相同,如果不同才会设置主角位置,这里要说到的是我们获得上一个位置的方法,当然,你也可以通过一个变量来控制,这里介绍通过计算得到的方法,首先通过主角的getposition方法获得的坐标只是主角相对于地图的坐标,我们加上地图的横纵坐标来获得主角的绝对坐标,然后再通过Px-Ax=dxPy-Ay=dy公式获得上一个触点的位置,最后设置主角位置,注意首先还是通过Px-Ax=dxPy-Ay=dy公式获得锚点应该移动到的位置,然后再减去地图的位置获得主角和地图的相对坐标

再来看ccTouchesEnded的实现:


很简单,就是如果索引值为-5时重新设置为-1的“未激活”状态。

如有错误之处,希望大家多多指正

下一篇继续游戏实例

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读