cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄的显示
来源:互联网 发布:我打的打印软件 编辑:程序博客网 时间:2024/06/10 14:31
上篇文章我们有了坦克,但是没有手柄,无法控制坦克。
1.这篇我们编写虚拟手柄来控制坦克。头文件大致内容如下:
- #define RES_PADDLE_LEFT "paddle/left.png"
- #define RES_PADDLE_LEFT_PRESS "paddle/left_press.png"
- #define RES_PADDLE_RIGHT "paddle/right.png"
- #define RES_PADDLE_RIGHT_PRESS "paddle/right_press.png"
- #define RES_PADDLE_UP "paddle/top.png"
- #define RES_PADDLE_UP_PRESS "paddle/top_press.png"
- #define RES_PADDLE_DOWN "paddle/buttom.png"
- #define RES_PADDLE_DOWN_PRESS "paddle/buttom_press.png"
- #define RES_PADDLE_FIRE "paddle/fire.png"
- #define RES_PADDLE_FIRE_PRESS "paddle/fire_press.png"
- class Panel : public CCLayer
- {
- public:
- virtual bool init();
- CREATE_FUNC(Panel);
- protected:
- Paddle* m_pPaddleUp;
- Paddle* m_pPaddleDown;
- Paddle* m_pPaddleLeft;
- Paddle* m_pPaddleRight;
- Paddle* m_pPaddleFire;
- };
上面定义了上下左右按钮的图片,还记得我们写关卡选择按钮的Paddle吧,
下面定义了五个Paddle分别对应上下左右开火按钮。
2.我们在初始化函数init中,加载按钮图片,然后设置按钮图片对应的坐标。
代码如下:
- bool Panel::init()
- {
- CCLayer::init();
- //加载手柄按钮所需的图片
- CCTexture2D* paddleTexture = CCTextureCache::sharedTextureCache()->addImage(RES_PADDLE_UP);
- m_pPaddleUp = Paddle::paddleWithTexture(paddleTexture);
- paddleTexture = CCTextureCache::sharedTextureCache()->addImage(RES_PADDLE_DOWN);
- m_pPaddleDown = Paddle::paddleWithTexture(paddleTexture);
- paddleTexture = CCTextureCache::sharedTextureCache()->addImage(RES_PADDLE_LEFT);
- m_pPaddleLeft = Paddle::paddleWithTexture(paddleTexture);
- paddleTexture = CCTextureCache::sharedTextureCache()->addImage(RES_PADDLE_RIGHT);
- m_pPaddleRight = Paddle::paddleWithTexture(paddleTexture);
- paddleTexture = CCTextureCache::sharedTextureCache()->addImage(RES_PADDLE_FIRE);
- m_pPaddleFire = Paddle::paddleWithTexture(paddleTexture);
- CCSize size = getContentSize();
- //设置手柄上下左右按钮以及开火按钮的位置
- int localX[5] = { size.width*4.5f / 26, size.width*4.5f / 26, size.width*2.3f / 26,
- size.width*6.7f / 26, size.width*22.0f / 26 };
- int localY[5] = { size.height*6.7 / 26, size.height*2.3 / 26, size.height*4.5f / 26,
- size.height*4.5f / 26, size.height*5.0 / 26 };
- Paddle* paddle[] = { m_pPaddleUp, m_pPaddleDown, m_pPaddleLeft, m_pPaddleRight, m_pPaddleFire };
- for (int i = 0; i<sizeof(paddle) / sizeof(paddle[0]); ++i)
- {
- addChild(paddle[i]);
- paddle[i]->setPosition(ccp(localX[i], localY[i]));
- CCSize szPaddle = paddle[i]->getContentSize();
- paddle[i]->setScale(size.height * 4.5f / 26 / szPaddle.height);
- }
- return true;
- }
3.最后再写一个函数获取按钮的状态,这样就知道当前按下了那个按钮:
在之前我们定义一组命令,按到那个按钮就返回什么命令:
- enum enumOrder
- {
- cmdNothing,
- cmdGoUP,
- cmdGoDown,
- cmdGoLeft,
- cmdGoRight,
- cmdFire
- };
4.再添加一个enumOrder getOrder();函数,实现如下:
- enumOrder Panel::getOrder()
- {
- enumOrder order = cmdNothing;
- if (m_pPaddleUp->getstate() == kPaddleStateGrabbed)
- order = cmdGoUP;
- else if (m_pPaddleDown->getstate() == kPaddleStateGrabbed)
- order = cmdGoDown;
- else if (m_pPaddleLeft->getstate() == kPaddleStateGrabbed)
- order = cmdGoLeft;
- else if (m_pPaddleRight->getstate() == kPaddleStateGrabbed)
- order = cmdGoRight;
- else if (m_pPaddleFire->getstate() == kPaddleStateGrabbed)
- order = cmdFire;
- return order;
- }
5,在ChoiceScene场景中添加成员变量Panel* mLayerPanel;,
然后在 ChoiceScene的init函数下面加上两行代码即可显示虚拟手柄:
- //添加虚拟手柄的显示
- mLayerPanel = Panel::create();
- addChild(mLayerPanel, 3);
显示效果图如下:
完整代码下载地址:
http://download.csdn.net/detail/yincheng01/6749935
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游戏开发系列教程-坦克大战游戏加载地图的编写
- Cocos2d-X研究之豪华版飞机大战游戏开发系列
- 使用《红孩儿工具箱》开发基于Cocos2d-x的《坦克大战》游戏
- Java开发的游戏之三 坦克大战 完整源代码
- adb server is out of date. killing... .
- 理解 Android 2D/3D 图形架构
- AdaBoost中利用Haar特征进行人脸识别算法分析与总结(二)
- 将项目部署到tomcat上El表达式 namespace错误
- Android ListView 最基本的用法,使用SimpleCursorAdapter
- cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄的显示
- 移动硬盘进水丢失数据怎么恢复
- 关于微信新版运营规则的八大误区和解读
- “毕竟,你胜利了......敬胜利者一杯。”
- Erlang笔记(11) - 顺序式编程进阶
- vs2008开发 问题的解决方案
- Linux下tomcat7+solr-4.7.0+Ik中文分词器安装
- Android 近百个项目的源代码
- Back to Android