Cocos2dx实现象棋之布局
发布时间:2020-12-14 16:55:25 所属栏目:百科 来源:网络整理
导读:开始界面 #ifndef SCENESTART_H#define SCENESTART_H#include "cocos2d.h"#include "SceneGame.h"USING_NS_CC;class SceneStart : public CCLayer{public: //SceneStart(); static CCScene * scene(); CREATE_FUNC(SceneStart) bool init(); bool ccTouchBeg
开始界面#ifndef SCENESTART_H #define SCENESTART_H #include "cocos2d.h" #include "SceneGame.h" USING_NS_CC; class SceneStart : public CCLayer { public: //SceneStart(); static CCScene * scene(); CREATE_FUNC(SceneStart) bool init(); bool ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent); void ccTouchEnded(CCTouch *pTouch,CCEvent *pEvent); void update(float delta); CCSprite *_red; CCSprite *_black; bool _selected; }; #endif // SCENESTART_H 开始界面实现了滚动布局与点击选择执黑还是执白的功能。 放置棋盘与桌面//desk CCSprite *desk=CCSprite::create("floor.jpg"); addChild(desk); desk->setPosition(ccp(winSize.width/2,winSize.height/2)); desk->setScaleX(winSize.width/desk->getContentSize().width); desk->setScaleY(winSize.height/desk->getContentSize().height); //add plate and stone CCSprite *plate=CCSprite::create("background.png"); plate->setAnchorPoint(ccp(0,0)); plate->setPosition(_plateoffset); plate->setScale((winSize.height-_plateoffset.y*2)/plate->getContentSize().height); addChild(plate); 创建棋子类#ifndef STONE_H #define STONE_H #include "cocos2d.h" USING_NS_CC; class Stone : public CCSprite { public: Stone(); enum TYPE {JIANG,SHI,XIANG,CHE,MA,PAO,BING}; static Stone *create(int id,bool red) { Stone *s=new Stone(); s->init(id,red); s->autorelease(); return s; } void reset(bool red); bool init(int id,bool red) { _id=id; _red=_id<16; //once init if(_id < 16) _type = _initPos[_id]._type; else _type = _initPos[_id-16]._type; const char* stonePic[14] = { "rshuai.png","rshi.png","rxiang.png","rche.png","rma.png","rpao.png","rbing.png","bjiang.png","bshi.png","bxiang.png","bche.png","bma.png","bpao.png","bzu.png" }; int idx=(_red?0:1)*7+_type; CCSprite::initWithFile(stonePic[idx]); setScale(.8f); reset(red); return true; } CC_SYNTHESIZE(TYPE,_type,Type) CC_SYNTHESIZE(int,_x,X) CC_SYNTHESIZE(int,_y,Y) CC_SYNTHESIZE(int,_id,Id) CC_SYNTHESIZE(bool,_dead,Dead) CC_SYNTHESIZE(bool,_red,Red) static struct InitPos { int _x; int _y; Stone::TYPE _type; }_initPos[16]; }; #endif // STONE_H 加载棋子类,世界坐标与棋盘坐标的转换//addstone for(int i=0;i<32;i++) { _s[i]=Stone::create(i,red); addChild(_s[i]); //_s[i]->setPosition(ccp(_s[i]->getX()*_d,_s[i]->getY()*_d)+_stoneoffset); //setRealPos(_s[i]); _s[i]->setPosition(ccp(CCRANDOM_0_1()*winSize.width,CCRANDOM_0_1()*winSize.height)); CCMoveTo* move=CCMoveTo::create(1,this->getStonePos(_s[i]->getX(),_s[i]->getY())); _s[i]->runAction(move); } 加载悔棋按钮CCMenu *menu=CCMenu::create(); CCMenuItemImage *item=CCMenuItemImage::create("regret.jpg","regret.jpg",this,menu_selector(SceneGame::back)); menu->addChild(item); addChild(menu); menu->setPositionX(menu->getPositionX()+200); _steps=CCArray::create(); _steps->retain(); 悔棋功能的实现void SceneGame::back(CCObject *) { //CCLog("HELLO WORLDn"); if(_steps->count()==0) return; Step *step=(Step*)_steps->lastObject(); _s[step->_moveid]->setX(step->_xFrom); _s[step->_moveid]->setY(step->_yFrom); _s[step->_moveid]->setPosition(getStonePos(step->_xFrom,step->_yFrom)); if(step->_killid!=-1) { _s[step->_killid]->setVisible(true); _s[step->_killid]->setDead(false); } _redTrun=!_redTrun; _steps->removeLastObject(); } 结果展示(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |