cocos2d-x的初步学习十七之坦克大战四

来源:互联网 发布:淘宝猎狐者户外冲锋衣 编辑:程序博客网 时间:2024/05/01 07:05

在这篇文章中,我们将添加坦克类,增加虚拟摇杆来移动我们的坦克。首页我们定义个坦克类,TankSprite继承自CCSprite,我们定义一些属性,比如坦克的类型,坦克移动的速度,坦克移动的方向等,下面直接上代码:

TankSprite.h

#include "cocos2d.h"typedef enum {    kBorn = 1,    kPlusStarOne,    kPlusStarTwo,    kPlusStarThree}TankKind;typedef  enum {        kUp = 1,    kDown,    kLeft,    kRight,    kFire,    kStay,    kPause    }TankAction;class TankSprite: public cocos2d::CCSprite{public:        virtual bool init();    CREATE_FUNC(TankSprite);        static TankSprite* initWithDelegate(int numLife,int tKind,cocos2d::CCSize mSize);    //定义移动速度    int _speed;    //life    int _life;    //地图size    cocos2d::CCSize _mapSize;    //tank类型    TankKind kind;    //tank移动方向    TankAction kaction;        };
TankSprite.cpp

#include "TankSprite.h"#include "SimpleAudioEngine.h"using namespace cocos2d;using namespace CocosDenshion;bool TankSprite::init(){    //////////////////////////////    // 1. super init first    if ( !CCSprite::init() )    {        return false;    }        return true;}TankSprite* TankSprite::initWithDelegate(int numLife, int tKind, CCSize mSize){    TankSprite *tank;        switch (tKind) {        case kBorn:                        tank=(TankSprite *)CCSprite::createWithSpriteFrameName("p1.png");                        tank->_speed=1;                        break;        case kPlusStarOne:                        break;        case kPlusStarTwo:                        break;                    case kPlusStarThree:                        break;                    default:            break;    }        tank->_life=numLife;    tank->_mapSize=mSize;    tank->kind=(TankKind)tKind;    tank->setScale(0.7);    //默认向上    tank->kaction=kUp;    return tank;    }

上面我们就简单了定义了一个坦克类,然后我们加入到我们的地图层中,

在MapLayer.cpp中

//获取objectgroup    _objects=gameMap->objectGroupNamed("objects");        //初始化tank    _tank1=TankSprite::initWithDelegate(numLife, tKind, _bg1Layer->getContentSize());        //tank的出生地    CCPoint tankPoint=this->objectPosition(_objects, "pl1");        _tank1->setPosition(ccp(tankPoint.x+gameMap->getTileSize().width, tankPoint.y+gameMap->getTileSize().width));            gameMap->addChild(_tank1, 1);

//获取地图中定义的一些坐标点CCPoint MapLayer::objectPosition(CCTMXObjectGroup *group,const char *object){    CCPoint point;        CCDictionary *dic=group->objectNamed(object);        point.x=dic->valueForKey("x")->intValue();        point.y=dic->valueForKey("y")->intValue();    return point;    }

这样,我们就把tank加入到我们的地图中去了,,,



~~~~~~~~~~~~~