上篇文章我们有了坦克,但是没有手柄,无法控制坦克。

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

cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄的显示相关推荐

  1. cocos2d-x游戏开发系列教程-坦克大战游戏之坦克的显示

    1.先定义坦克的一些属性 class Tank : public CCSprite { public :Tank();~Tank();static Tank* createTankWithTankTy ...

  2. HTML5游戏开发系列教程5(译)

    原文地址:http://www.script-tutorials.com/html5-game-development-lesson-5/ 最终我决定准备下一篇游戏开发系列的文章,我们将继续使用can ...

  3. unity2d游戏开发系列教程:一、环境安装

    从这篇文章开始,一步一步教大家从0开始通过2DGameKit项目进行2D游戏开发 第一步.环境安装 1.先使用手机下载Unity Connect并注册登陆 2.进入unity官网https://uni ...

  4. unity2d游戏开发系列教程:四、一个2D游戏所需要的主要功能(游戏框架)

    目录 unity2d游戏开发系列教程:一.环境安装 unity2d游戏开发系列教程:二.新建工程并熟悉Unity编辑器常用功能 unity2d游戏开发系列教程:三.场景布置,增加怪物和机关 原文下载 ...

  5. unity2d游戏开发系列教程:三、场景布置,增加怪物和机关

    目录 unity2d游戏开发系列教程:一.环境安装 unity2d游戏开发系列教程:二.新建工程并熟悉Unity编辑器常用功能 第一节.场景草地布置 先查看一下资源文件里都有什么,一会就要用到的 打开 ...

  6. unity2d游戏开发系列教程:二、新建工程并熟悉Unity编辑器常用功能

    目录 unity2d游戏开发系列教程:一.环境安装 第一步.打开项目 耐心等待一小会 工程界面 第二步.创建第一个场景(第一关)进行试玩 点击图中标号1的运行按钮,即可简单试玩感受,操作如下 移动A, ...

  7. 100行JS代码实现❤坦克大战js小游戏源码 HTML5坦克大战游戏代码(HTML+CSS+JavaScript )

    坦克大战js小游戏源码 HTML5坦克大战游戏代码(HTML+CSS+JavaScript ) HTML5坦克大战网页小游戏,完美还原小霸王学习机效果,以坦克战斗及保卫基地为主题,属于策略型类游戏. ...

  8. 一文教你使用java开发一款坦克大战游戏

    导读:随着人们对生活质量的要求一天比一天高,为了让人们更好地开掘自身的智慧,游戏就此进入了大众的视野,在人们的生活中有着重要的位置,已然变得必不可少.游戏产业推动高新技术不断升级,极大地促进了经济的增 ...

  9. java开发一款坦克大战游戏

    导读:随着人们对生活质量的要求一天比一天高,为了让人们更好地开掘自身的智慧,游戏就此进入了大众的视野,在人们的生活中有着重要的位置,已然变得必不可少.游戏产业推动高新技术不断升级,极大地促进了经济的增 ...

最新文章

  1. PYPL 二月榜单发布:最受欢迎的编程语言、IDE 和数据库都是哪些
  2. kl散度度量分布_强化学习新思潮1:值分布强化学习(04)
  3. 2022届互联网秋招备战
  4. 【高校宿舍管理系统】第十章 缺勤管理、报修管理、来访人员管理以及公告管理
  5. 开始用Flutter做游戏吧
  6. “小而美”背后的大道理:WebRAY崛起的深层次原因
  7. python安装模块方法_Python模块安装方法
  8. 在Docker里部署ReviewBoard4.0-RC
  9. 【转】Xposed+JustTrustMe关闭SSL证书验证解决无法抓取https包问题
  10. flash发布html快捷键,Flash菜单操作之快捷键
  11. windows10开机时出现你的设备遇到问题,需要重启
  12. 【新年新气象_新年CSDN第一篇】斯特林数简介及应用
  13. php 秒拍视频解析,新浪微博视频解析源码_秒拍视频站外调用可自定义广告
  14. Vue教程(三十九)vue-cli2脚手架安装
  15. matlab containers,matlab中的containers.Map()
  16. Android 渠道游戏 - 聚合SDK
  17. 分享133个ASP源码,总有一款适合您
  18. 牛客网 赛码网 js输入输出
  19. 两个L组成的括号?(取整符号)
  20. azure 配置vpn_ASP.NET和Azure中配置中的私有配置数据和连接字符串的最佳做法

热门文章

  1. 你也能看得懂的python算法书pdf_你也能看得懂的Python算法书最新章节_王硕著_掌阅小说网...
  2. tiup单机扩展多pd报错
  3. 一位27岁软件测试员,测试在职近5年,月薪不到2W,担心被应届生取代
  4. java计算机毕业设计交通非现场执法系统MyBatis+系统+LW文档+源码+调试部署
  5. topShelf 安装window服务
  6. 地理国情监测,arcpy将文件夹多个gdb的要素数据集Dataset下的要素类featureClass,使用FeatureClassToShapefile_conversion转换成shapefile
  7. 2021绥化高考成绩查询,绥化中考成绩查询2021
  8. 车站计算机的在线运行模式,车站计算机联锁仿真设计(一).pdf
  9. 用心理学解释用户行为
  10. 不安装cudnn可不可以_ubuntu16.04 安装NVIDIA和CUDA9.2 cudNN7.1