cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄控制坦克移动
来源:互联网 发布:java有哪些技术 编辑:程序博客网 时间:2024/06/10 08:49
上篇显示了控制手柄,但是还不能用来控制坦克,
这篇将会讲手柄和坦克的移动结合起来。
1.先在CityScene场景中实现场景的虚函数virtual void onEnter();
onEnter在进入场景后将会被调用,我们在onEnter中设置一个定时器,
游戏每一帧都调用次,这样我们可以在每帧中检测手柄按钮是否被按下,
然后控制坦克的移动,onEnter和update的函数实现如下:
void CityScene::onEnter(){CCLayer::onEnter();this->scheduleUpdate();}void CityScene::update(float delta){CCLayer::update(delta);//简单的向前运动,测试使用mPlayerTank[0]->setPositionY(mPlayerTank[0]->getPositionY()+1);}
在上面的update函数中,我们为了测试效果,简单的让坦克向前移动。
2.为了能通过控制手柄产生的命令控制坦克移动,我们在Tank类中添加相应命令函数
void command(enumOrder order);,实现函数如下:
void Tank::command(enumOrder order){float stepX = 0.0f;float stepY = 0.0f;switch (order){case cmdNothing:break;case cmdGoUP:stepY = 1.0f;break;case cmdGoDown:stepY = -1.0f;break;case cmdGoLeft:stepX = -1.0f;break;case cmdGoRight:stepX = 1.0f;break;case cmdFire:break;default:break;}setPositionX(getPositionX() + stepX);setPositionY(getPositionY() + stepY);}
4.我们接下来要使坦克响应虚拟手柄的控制,还需要修改第一步中的update。
在update中获取虚拟手柄的命令,然后传入Tank的命令控制函数command中:
void CityScene::update(float delta){CCLayer::update(delta);//将控制面板中的mLayerPanel获取的命令传给坦克mPlayerTank[0]->command(mLayerPanel->getOrder());}
5.我们尝试点击虚拟手柄,可以看到坦克已经可以自由移动了,但是移动的时候坦克方向没有改变,
我们根据移动方向来旋转坦克,使用setRotation,具体实现如下:
void Tank::command(enumOrder order){float stepX = 0.0f;float stepY = 0.0f;static float fRotation = 0.0f;switch (order){case cmdNothing:break;case cmdGoUP:stepY = 1.0f;fRotation = 0.0f;break;case cmdGoDown:stepY = -1.0f;fRotation = 180.0f;break;case cmdGoLeft:stepX = -1.0f;fRotation = 270.0f;break;case cmdGoRight:stepX = 1.0f;fRotation = 90.0f;break;case cmdFire:break;default:break;}setPositionX(getPositionX() + stepX);setPositionY(getPositionY() + stepY);setRotation(fRotation);}
下面用我们的鼠标来控制上下左右可以正常移动了。效果如下:
程序完整代码下载:
http://download.csdn.net/detail/yincheng01/6750169
0 0
- cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄控制坦克移动
- cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄的显示
- cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄的显示
- cocos2d-x游戏开发系列教程-坦克大战游戏之坦克的显示
- cocos2d-x游戏开发系列教程-坦克大战游戏之敌方坦克AI的编写
- cocos2d-x游戏开发系列教程-坦克大战游戏之所有坦克之间的碰撞检测
- cocos2d-x游戏开发系列教程-坦克大战游戏之坦克和地图碰撞的检测上
- cocos2d-x游戏开发系列教程-坦克大战游戏之坦克和地图碰撞的检测下
- cocos2d-x游戏开发系列教程-坦克大战游戏之子弹和地图碰撞
- cocos2d-x游戏开发系列教程-坦克大战游戏之子弹的碰撞检测处理
- cocos2d-x游戏开发系列教程-坦克大战游戏启动界面的编写
- cocos2d-x游戏开发系列教程-坦克大战游戏关卡选择场景的编写上
- cocos2d-x游戏开发系列教程-坦克大战游戏关卡选择场景的编写中
- cocos2d-x游戏开发系列教程-坦克大战游戏关卡选择场景的编写下
- cocos2d-x游戏开发系列教程-坦克大战游戏加载地图的编写
- 坦克游戏教程二:实现坦克移动以及方向控制
- C#开发-----坦克大战游戏
- HTML5 坦克大战 游戏开发
- 一个人写的操作系统 - Sparrow OS
- Java多线程-(2)线程栈模型与线程的变量
- java实现附件预览(openoffice+swftools+flexpaper)
- document.documentElement.clientWidth为0的问题
- Qt 初探信号与槽(signal & slot)
- cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄控制坦克移动
- 绘制线条
- linux启动流程分析
- LeetCode(23)Merge K Sorted Lists
- 黑马程序员—抽象类和接口
- fastjson 使用方法
- ServerSocket和Socket建立通信(客户端发送消息服务器接收并返回到客户端接收输出)
- 自己做的第一个安卓应用:宝贝学字母,大家多支持O(∩_∩)O~
- 用devstack快速搭起openstack的环境