cocos2d-x的初步学习十八之坦克大战五
2013-07-07 15:36
253 查看
这篇文章中,我们将加入如何移动我们的坦克,以前的文章中,我们提到了一种虚拟摇杆,SneakInput。这里,我们将采用SneakInput类来作为我们的虚拟摇杆类。首页,我们新建一个控制层类,ControlLayer,这个类将管理着坦克的控制,OK,下面我们直接上代码:
ControlLayer.h
ControlLayer.cpp
对于我们的TankSprite类,我们修改下,增加移动的函数
TankSprite.cpp
最后在我们的游戏场景GameScene中,加入控制层,
GameScene.cpp
Ok,就这样简单,然后我们就可以移动我们的tank了~~~~
ControlLayer.h
#include "cocos2d.h" #include "SneakyJoystick.h" #include "SneakyJoystickSkinnedBase.h" #include "MapLayer.h" #include "TankSprite.h" class ControlLayer: public cocos2d::CCLayer { public: virtual bool init(); // preprocessor macro for "static create()" constructor ( node() deprecated ) CREATE_FUNC(ControlLayer); MapLayer *_mapLayer; private: SneakyJoystick *joystick; void addJoystick(void); void update(float t); }; #endif /* defined(__TestTank2dx__ControlLayer__) */
ControlLayer.cpp
#include "ControlLayer.h" #include "SimpleAudioEngine.h" using namespace cocos2d; using namespace CocosDenshion; bool ControlLayer::init() { ////////////////////////////// if ( !CCLayer::init()) { return false; } this->addJoystick(); //调用系统的刷新函数 this->scheduleUpdate(); return true; } void ControlLayer::addJoystick() { float joystickRadius = 140; joystick=new SneakyJoystick(); joystick->autorelease(); joystick->initWithRect(CCRectZero); //是否自动回到中心 joystick->setAutoCenter(true); //是否支持死亡区域,该区域不会触发 joystick->setHasDeadzone(true); //死亡区域半径 joystick->setDeadRadius(10); SneakyJoystickSkinnedBase *joystickSkin=new SneakyJoystickSkinnedBase(); joystickSkin->autorelease(); joystickSkin->init(); //背景 CCSprite *bgSprite=CCSprite::create("control_bg.png"); bgSprite->setOpacity(100); joystickSkin->setBackgroundSprite(bgSprite); //中心点 CCSprite *thumbSprite=CCSprite::create("cen.png"); thumbSprite->setOpacity(100); joystickSkin->setThumbSprite(thumbSprite); joystickSkin->getThumbSprite()->setScale(1.0f); joystickSkin->setPosition(CCPointMake(joystickRadius,joystickRadius)); joystickSkin->setJoystick(joystick); this->addChild(joystickSkin); } void ControlLayer::update(float t) { if (_mapLayer==NULL) { return; } TankSprite *tank=_mapLayer->_tank1; if (tank==NULL) { return; } // getVelocity()到的数值很小 需要放大 CCPoint poi = ccpMult(joystick->getVelocity(), 50); //right if ((poi.x > 0) && (poi.x - poi.y) >0 && (poi.x + poi.y) > 0){ tank->moveRight(); } //left else if ( (poi.x < 0) && (poi.x + poi.y) < 0 &&(poi.x - poi.y) < 0) { tank->moveLeft(); } //up else if ((poi.y > 0) &&(poi.y - poi.x) > 0 &&(poi.y + poi.x) >0 ){ tank->moveUp(); } //down else if ((poi.y < 0) &&(poi.y - poi.x) < 0 && (poi.y + poi.x) < 0) { tank->moveDown(); } }
对于我们的TankSprite类,我们修改下,增加移动的函数
TankSprite.cpp
void TankSprite::moveUp() { //设置旋转方向 this->setRotation(0); kaction=kUp; // CCPoint tp=this->getPosition(); this->setPosition(ccp(this->getPosition().x, this->getPosition().y+_speed)); } void TankSprite::moveDown() { } void TankSprite::moveLeft() { } void TankSprite::moveRight() { }
最后在我们的游戏场景GameScene中,加入控制层,
GameScene.cpp
_conLayer=ControlLayer::create(); _conLayer->_mapLayer=_mapLayer; this->addChild(_conLayer, 1);
Ok,就这样简单,然后我们就可以移动我们的tank了~~~~
相关文章推荐
- cocos2d-x的初步学习十九之坦克大战六
- cocos2d-x的初步学习十六之坦克大战三
- cocos2d-x的初步学习十四之坦克大战一
- cocos2d-x的初步学习二十之坦克大战七
- cocos2d-x的初步学习八
- cocos2d-x的初步学习十一之CCTableView
- 我的Cocos2d-x学习笔记(十八)CCGridAction
- JavaSE学习总结-坦克大战
- 【unity 3D】【siki的坦克大战】【学习记录(二)】【08-12】
- Cocos2d-x学习(十八):Tiled妙用
- cocos2d-x的初步学习十之CCScrollview
- cocos2d-x的初步学习二
- cocos2d-x的初步学习九
- Cocos2d-x学习(十八):Tiled妙用
- cocos2d-x的初步学习七
- cocos2d-x的初步学习十之CCScrollview
- cocos2d-x的初步学习十一之CCTableView (转)
- cocos2d-x的初步学习一
- cocos2d-x的初步学习六
- cocos2d-x的初步学习七