首页 > 代码库 > 一起做cocos2d-x 小游戏2
一起做cocos2d-x 小游戏2
第一版出来了
1 #ifndef __HELLOWORLD_SCENE_H__ 2 #define __HELLOWORLD_SCENE_H__ 3 4 #include "cocos2d.h" 5 #include <map> 6 #include <vector> 7 8 USING_NS_CC; 9 10 typedef unsigned char BYTE;11 12 class HelloWorld : public cocos2d::Layer13 {14 public:15 // there‘s no ‘id‘ in cpp, so we recommend returning the class instance pointer16 static cocos2d::Scene* createScene();17 18 // Here‘s a difference. Method ‘init‘ in cocos2d-x returns bool, instead of returning ‘id‘ in cocos2d-iphone19 virtual bool init(); 20 21 // a selector callback22 void menuCloseCallback(cocos2d::Ref* pSender);23 24 // implement the "static create()" method manually25 CREATE_FUNC(HelloWorld);26 };27 28 class ChessPiece : public cocos2d::Sprite29 {30 public:31 virtual bool init(); 32 33 //设置队伍 1 234 void setType(BYTE type);35 static ChessPiece* pieceWithType(BYTE type);36 void setChosed(bool chose);37 bool getChosed();38 bool checkIsTouch(Point pos);39 protected:40 BYTE mNowType;41 Node * mChosedShow;//选中标志42 };43 44 #define BOARD_LINE_NUM 445 class Chessboard : public cocos2d::Node46 {47 public:48 virtual bool init(); 49 50 CREATE_FUNC(Chessboard);51 52 //重置棋盘53 void reSet();54 virtual void onEnter();55 bool onTouchBegan(Touch* touch, Event* event);56 void onTouchMoved(Touch* touch, Event* event);57 void onTouchEnded(Touch* touch, Event* event);58 59 protected:60 Point maBoardPoints[BOARD_LINE_NUM][BOARD_LINE_NUM];61 BYTE maBoardData[BOARD_LINE_NUM][BOARD_LINE_NUM];62 int miTeam1LeftNum;63 int miTeam2LeftNum;64 bool mbTeam1Turn;//是否是改队伍1 下棋了65 bool mbGameOver;66 Sprite * maStateSp[2];67 68 std::map<int,ChessPiece*> mPieces;69 Node * maCanWalkShow[BOARD_LINE_NUM][BOARD_LINE_NUM];70 int miLastChosedIndex;71 72 Point parseIndexToPos(int index);73 int parsePosToIndex(Point pos);74 std::vector<Point> getCanWalkPosWithIndex(int index);75 76 std::vector<Point> mvCanWalkPos;77 void showCanWalkPos(bool bShow);78 void checkDieWithPos(Point pos);79 int checkDiePos(int x1,int x2,int x3,int x4,int key);80 void someOneDie(int iX,int iY);81 void checkGameEndWithNumAndTeam(int iNum,int iTeam);82 bool checkIsOnTurn(int iTeam);83 bool checkCanMoveHere(int x1,int y1,int x2,int y2);84 85 void refreshStateFlag();86 void onPressReset(cocos2d::Ref* pSender);87 };88 89 90 91 92 #endif // __HELLOWORLD_SCENE_H__
1 #include "HelloWorldScene.h" 2 3 bool Chessboard::init() 4 { 5 ////////////////////////////// 6 // 1. super init first 7 if ( !Node::init() ) 8 { 9 return false; 10 } 11 12 Size visibleSize = Director::getInstance()->getVisibleSize(); 13 Vec2 origin = Director::getInstance()->getVisibleOrigin(); 14 15 miLastChosedIndex = -1; 16 17 //棋盘底图 18 int i = 0 , j = 0; 19 auto bg = Sprite::create("muwen.png"); 20 if( bg != NULL ) 21 { 22 int iX = 0, iY = 0, iW = 0, iH = 0 ; 23 iW = bg->getContentSize().width; 24 iH = bg->getContentSize().height; 25 iX = ceil(visibleSize.width/iW); 26 iY = ceil(visibleSize.height/iH); 27 28 for ( i = 0; i < iX; i++ ) 29 { 30 for ( j = 0; j < iY; j++ ) 31 { 32 auto temp = Sprite::create("muwen.png"); 33 temp->setAnchorPoint(CCPointZero); 34 temp->setPosition(ccp(i*iW,j*iH)); 35 addChild(temp); 36 } 37 } 38 } 39 40 //当前 41 LabelTTF * pCurrent = LabelTTF::create("now", "fonts/arial.ttf", 20); 42 pCurrent->setPosition( ccp(20,visibleSize.height - 20 ) ); 43 pCurrent->setAnchorPoint( ccp(0,1)); 44 addChild(pCurrent); 45 46 Sprite * pNow1 = Sprite::create("white_point.png"); 47 pNow1->setPosition( ccp(20,visibleSize.height - 50 ) ); 48 pNow1->setAnchorPoint( ccp(0,1)); 49 addChild(pNow1); 50 maStateSp[0] = pNow1; 51 52 pNow1 = Sprite::create("black_point.png"); 53 pNow1->setPosition( ccp(20,visibleSize.height - 50 ) ); 54 pNow1->setAnchorPoint( ccp(0,1)); 55 addChild(pNow1); 56 maStateSp[1] = pNow1; 57 58 //棋牌黑框 3*3 59 auto cell = Sprite::create("point.png"); 60 if( cell != NULL ) 61 { 62 int iLineW = 18; 63 int x = visibleSize.width/2 - 1.5*cell->getContentSize().width; 64 int y = visibleSize.height/2 - 1.5*cell->getContentSize().height; 65 for ( i = 0; i < (BOARD_LINE_NUM - 1) ; i++ ) 66 { 67 for ( j = 0; j < (BOARD_LINE_NUM -1) ; j++ ) 68 { 69 auto temp = Sprite::create("point.png"); 70 temp->setAnchorPoint(CCPointZero); 71 Point pos = ccp(x+1*iLineW+i*(cell->getContentSize().width-iLineW),y+1*iLineW+j*(cell->getContentSize().height-iLineW)); 72 temp->setPosition(pos); 73 addChild(temp); 74 maBoardPoints[i][j] = ccp(pos.x+8,pos.y+8); 75 } 76 } 77 } 78 79 //初始化外围的点的坐标 80 for ( i = 0; i < (BOARD_LINE_NUM -1) ; i++ ) 81 { 82 maBoardPoints[i][(BOARD_LINE_NUM - 1)].x = maBoardPoints[i][2].x; 83 maBoardPoints[i][(BOARD_LINE_NUM - 1)].y = maBoardPoints[i][2].y + (maBoardPoints[i][2].y - maBoardPoints[i][1].y); 84 85 maBoardPoints[(BOARD_LINE_NUM - 1)][i].x = maBoardPoints[2][i].x + (maBoardPoints[2][i].x - maBoardPoints[1][i].x); 86 maBoardPoints[(BOARD_LINE_NUM - 1)][i].y = maBoardPoints[2][i].y ; 87 } 88 89 maBoardPoints[i][(BOARD_LINE_NUM - 1)].x = maBoardPoints[2][2].x + (maBoardPoints[2][2].x - maBoardPoints[1][2].x); 90 maBoardPoints[i][(BOARD_LINE_NUM - 1)].y = maBoardPoints[2][2].y + (maBoardPoints[2][2].y - maBoardPoints[2][1].y); 91 92 93 for ( i = 0; i < BOARD_LINE_NUM; i++ ) 94 { 95 for ( j = 0; j < BOARD_LINE_NUM; j++ ) 96 { 97 { 98 LayerColor * piece = LayerColor::create(Color4B(0, 255, 0, 200), 40, 40); 99 piece->setAnchorPoint(ccp(0.5f,0.5f));100 piece->ignoreAnchorPointForPosition(false);101 piece->setPosition(maBoardPoints[i][j]);102 addChild(piece);103 piece->setVisible(false);104 maCanWalkShow[i][j] = piece;105 }106 }107 }108 reSet();109 110 111 MenuItemFont::setFontSize(20);112 auto closeItem = MenuItemFont::create("reset",CC_CALLBACK_1(Chessboard::onPressReset, this));113 closeItem->setPosition( ccp(20,visibleSize.height - 150 ) );114 closeItem->setAnchorPoint( ccp(0,1));115 116 //closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,117 // origin.y + closeItem->getContentSize().height/2));118 119 // create menu, it‘s an autorelease object120 auto menu = Menu::create(closeItem, NULL);121 menu->setPosition(Vec2::ZERO);122 this->addChild(menu, 1);123 124 125 return true;126 }127 void Chessboard::onPressReset(cocos2d::Ref* pSender)128 {129 reSet();130 }131 void Chessboard::onEnter()132 {133 Node::onEnter();134 135 // Register Touch Event136 auto listener = EventListenerTouchOneByOne::create();137 listener->setSwallowTouches(true);138 139 listener->onTouchBegan = CC_CALLBACK_2(Chessboard::onTouchBegan, this);140 listener->onTouchMoved = CC_CALLBACK_2(Chessboard::onTouchMoved, this);141 listener->onTouchEnded = CC_CALLBACK_2(Chessboard::onTouchEnded, this);142 143 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);144 }145 bool Chessboard::onTouchBegan(Touch* touch, Event* event)146 {147 // CCLOG("Paddle::onTouchBegan id = %d, x = %f, y = %f", touch->getID(), touch->getLocation().x, touch->getLocation().y);148 int w = maBoardPoints[1][0].x - maBoardPoints[0][0].x;149 int h = maBoardPoints[0][1].y - maBoardPoints[0][0].y;150 Point relativePos = ccp( touch->getLocation().x - maBoardPoints[0][0].x,touch->getLocation().y - maBoardPoints[0][0].y );151 //CCLOG("relativePos: x=%f y=%f",relativePos.x,relativePos.y);152 int iX = int ( relativePos.x / w + 0.5 );153 int iDisX = (int)relativePos.x%w;154 155 int iY = int ( relativePos.y / h + 0.5 );156 int iDisY = (int)relativePos.y%h;157 158 bool bChosed = false;159 int radius = 40;160 if( iDisX < radius && iDisY < radius ||161 iDisX < radius && iDisY > h - radius ||162 iDisX > w - radius && iDisY > iDisY < radius ||163 iDisX > w - radius && iDisY > h - radius 164 )165 {166 CCLOG("TOUCH: x=%d y=%d",iX,iY);167 int choseIndex = parsePosToIndex(ccp(iX,iY));168 //如果是点中了格子169 if( 0 == maBoardData[iX][iY] )170 {//点中了空白格子171 Point old = parseIndexToPos(miLastChosedIndex);172 if( miLastChosedIndex >= 0 && checkCanMoveHere(old.x,old.y,iX,iY) )173 {//将选中棋子移过来174 std::map<int,ChessPiece*>::iterator it = mPieces.find( miLastChosedIndex );175 if( it != mPieces.end() )176 {177 //更新数据层178 int iTeam = maBoardData[(int)old.x][(int)old.y];179 maBoardData[(int)old.x][(int)old.y] = 0;180 maBoardData[iX][iY] = iTeam;181 miLastChosedIndex = -1;182 183 //更新ui层184 185 it->second->runAction(Sequence::createWithTwoActions(186 MoveTo::create(0.3f,maBoardPoints[iX][iY]),187 CallFunc::create( CC_CALLBACK_0(Chessboard::checkDieWithPos, this,ccp(iX,iY)))188 ));189 ChessPiece* pTemp = it->second;190 pTemp->setChosed(false);191 mPieces.erase(it);192 mPieces[choseIndex] = pTemp;193 194 mbTeam1Turn = !mbTeam1Turn;195 refreshStateFlag();196 //checkDieWithPos(ccp(iX,iY),iTeam);197 }198 }199 }200 else201 {//点中了棋子202 if( checkIsOnTurn(maBoardData[iX][iY]) )203 {204 if(miLastChosedIndex >= 0)205 {206 mPieces[miLastChosedIndex]->setChosed(false);207 }208 209 showCanWalkPos(false);210 mvCanWalkPos = getCanWalkPosWithIndex(parsePosToIndex(ccp(iX,iY)));211 showCanWalkPos(true);212 213 std::map<int,ChessPiece*>::iterator it = mPieces.find( choseIndex );214 if( it != mPieces.end() )215 {216 it->second->setChosed(true);217 miLastChosedIndex = choseIndex;218 bChosed = true;219 }220 }221 }222 }223 224 if(false == bChosed)225 {226 showCanWalkPos(false);227 if(miLastChosedIndex >= 0)228 {229 mPieces[miLastChosedIndex]->setChosed(false);230 }231 232 miLastChosedIndex = -1;233 }234 return true;235 }236 237 void Chessboard::onTouchMoved(Touch* touch, Event* event)238 {239 // CCLOG("Paddle::onTouchMoved id = %d, x = %f, y = %f", touch->getID(), touch->getLocation().x, touch->getLocation().y);240 }241 242 void Chessboard::onTouchEnded(Touch* touch, Event* event)243 {244 245 } 246 bool Chessboard::checkCanMoveHere(int x1,int y1,int x2,int y2)247 {248 bool bRet = false;249 int disX = abs(x1-x2);250 int disY = abs(y1-y2);251 if( disY <= 1 && disX <= 1 && disX != disY )252 {253 bRet = true;254 }255 return bRet;256 }257 void Chessboard::checkDieWithPos(Point pos)258 {259 //先判断横向260 int x = (int)pos.x;261 int y = (int)pos.y;262 int iDieX = checkDiePos(maBoardData[0][y],maBoardData[1][y],maBoardData[2][y],maBoardData[3][y],maBoardData[x][y]);263 if( iDieX != -1 )264 {265 someOneDie(iDieX,y);266 }267 268 int iDieY = checkDiePos(maBoardData[x][0],maBoardData[x][1],maBoardData[x][2],maBoardData[x][3],maBoardData[x][y]);269 if( iDieY != -1 )270 {271 someOneDie(x,iDieY);272 }273 }274 void Chessboard::someOneDie(int iX,int iY)275 {276 //删除数据层277 int iTeam = maBoardData[iX%BOARD_LINE_NUM][iY%BOARD_LINE_NUM];278 if( 1 == iTeam )279 {280 miTeam1LeftNum--;281 checkGameEndWithNumAndTeam(miTeam1LeftNum,1);282 }283 else if( 2 == iTeam )284 {285 miTeam2LeftNum--;286 checkGameEndWithNumAndTeam(miTeam2LeftNum,2);287 }288 289 maBoardData[iX%BOARD_LINE_NUM][iY%BOARD_LINE_NUM] = 0;290 291 //删除ui层292 std::map<int,ChessPiece*>::iterator it = mPieces.find( parsePosToIndex(ccp(iX,iY)) );293 if ( it != mPieces.end() )294 {295 it->second->removeFromParent();296 mPieces.erase(it);297 }298 }299 void Chessboard::refreshStateFlag()300 {301 maStateSp[0]->setVisible(mbTeam1Turn);302 maStateSp[1]->setVisible(!mbTeam1Turn);303 }304 void Chessboard::checkGameEndWithNumAndTeam(int iNum,int iTeam)305 {306 if( iNum <= 1 && false == mbGameOver )307 {308 mbGameOver = true;309 CCLOG("team:%d is die ,game ove!!",iTeam);310 //String sShow;311 //sShow.initWithFormat(312 std::string sShow;;313 if( 1 == iTeam )314 {315 sShow.assign("游戏结束!黑方获胜^^!");316 }317 else318 {319 sShow.assign("游戏结束!白方获胜^^!");320 }321 cocos2d::MessageBox( sShow.c_str(),"系统" );322 }323 }324 /*325 四个位置的 team id,key为 活动的棋子的team id( 1:队伍1 2:队伍2 0:空白)326 检查当前是否有棋子被吃了 如果返回-1表明木有伤亡,其他则表示 位置第几的棋子被吃了。。327 2110328 0211329 1120330 0112331 */332 int Chessboard::checkDiePos(int x1,int x2,int x3,int x4,int key)333 {334 int iRet = -1;335 if( x1 != key && x1 != 0 && x2 == key && x3 == key && 0 == x4 )336 {337 iRet = 0;338 }339 else if( 0 == x1 && x2 != key && x2 != 0 && x3 == key && x4 == key )340 {341 iRet = 1;342 }343 else if( x1 == key && x2 == key && x3 != key && x3 != 0 && 0 == x4 )344 {345 iRet = 2;346 }347 else if( 0 == x1 && x2 == key && x3 == key && x4 != key && x4 != 0 )348 {349 iRet = 3;350 }351 return iRet;352 }353 bool Chessboard::checkIsOnTurn(int iTeam)354 {355 bool bRet = false;356 if(mbTeam1Turn)357 {358 if( 1 == iTeam )359 {360 bRet = true;361 }362 }363 else364 {365 if( 2 == iTeam )366 {367 bRet = true;368 }369 }370 return bRet;371 }372 void Chessboard::reSet()373 {374 //清除所有棋子375 std::map<int,ChessPiece*>::iterator it;376 for ( it = mPieces.begin() ; it != mPieces.end() ; ++ it )377 {378 it->second->removeFromParent();379 }380 mPieces.clear();381 382 int i = 0 , j = 0;383 memset(maBoardData,0,sizeof(maBoardData));384 //初始化1队385 for ( i = 0; i < 4; i++ )386 {387 maBoardData[i][3] = 1;388 }389 maBoardData[0][2] = 1;390 maBoardData[3][2] = 1;391 392 //初始化2队393 for ( i = 0; i < 4; i++ )394 {395 maBoardData[i][0] = 2;396 }397 maBoardData[0][1] = 2;398 maBoardData[3][1] = 2;399 400 miTeam1LeftNum = 6;401 miTeam2LeftNum = 6;402 403 mbGameOver = false;404 405 mbTeam1Turn = true;406 407 refreshStateFlag();408 //棋子409 for ( i = 0; i < BOARD_LINE_NUM; i++ )410 {411 for ( j = 0; j < BOARD_LINE_NUM; j++ )412 {413 if( 1 == maBoardData[i][j] )414 {415 auto piece = ChessPiece::pieceWithType(1);416 piece->setPosition(maBoardPoints[i][j]);417 addChild(piece);418 mPieces[(BOARD_LINE_NUM*i+j)] = piece;419 }420 else if( 2 == maBoardData[i][j] )421 {422 auto piece = ChessPiece::pieceWithType(2);423 piece->setPosition(maBoardPoints[i][j]);424 addChild(piece);425 mPieces[(BOARD_LINE_NUM*i+j)] = piece;426 }427 }428 }429 }430 Point Chessboard::parseIndexToPos(int index)431 {432 return ccp(index/BOARD_LINE_NUM,index%BOARD_LINE_NUM);433 }434 int Chessboard::parsePosToIndex(Point pos)435 {436 return pos.x*BOARD_LINE_NUM + pos.y;437 }438 std::vector<Point> Chessboard::getCanWalkPosWithIndex(int index)439 {440 std::vector<Point> vRet;441 Point pos = parseIndexToPos(index);442 //up443 if( pos.y + 1 < BOARD_LINE_NUM )444 {//再检查是否已经有其他棋子了445 if( 0 == maBoardData[(int)pos.x][(int)pos.y+1] )446 {447 vRet.push_back(ccp(pos.x,pos.y+1));448 }449 }450 451 //down452 if( pos.y - 1 >= 0 )453 {//再检查是否已经有其他棋子了454 if( 0 == maBoardData[(int)pos.x][(int)pos.y-1] )455 {456 vRet.push_back(ccp(pos.x,pos.y-1));457 }458 }459 460 //left461 if( pos.x - 1 >= 0 )462 {//再检查是否已经有其他棋子了463 if( 0 == maBoardData[(int)pos.x - 1][(int)pos.y] )464 {465 vRet.push_back(ccp(pos.x-1,pos.y));466 }467 }468 469 //right470 if( pos.x + 1 < BOARD_LINE_NUM )471 {//再检查是否已经有其他棋子了472 if( 0 == maBoardData[(int)pos.x + 1][(int)pos.y] )473 {474 vRet.push_back(ccp(pos.x+1,pos.y));475 }476 }477 478 return vRet;479 }480 void Chessboard::showCanWalkPos(bool bShow)481 {482 for (int i = 0; i < mvCanWalkPos.size(); i++)483 {484 Point pos = mvCanWalkPos.at(i);485 maCanWalkShow[(int)pos.x%BOARD_LINE_NUM][(int)pos.y%BOARD_LINE_NUM]->setVisible(bShow);486 }487 }488 ChessPiece* ChessPiece::pieceWithType(BYTE type)489 {490 ChessPiece* pPiece = new ChessPiece();491 pPiece->init();492 pPiece->setType(type);493 pPiece->autorelease();494 return pPiece;495 }496 bool ChessPiece::init()497 {498 //////////////////////////////499 // 1. super init first500 if ( !Sprite::init() )501 {502 return false;503 }504 505 initWithTexture(Sprite::create("black_point.png")->getTexture());506 507 mChosedShow = Node::create();508 mChosedShow->setAnchorPoint(ccp(0.5f,0.5f));509 mChosedShow->setPosition(Vec2(getContentSize().width/2.0f,getContentSize().height/2.0f));510 addChild(mChosedShow);511 int radio = 20;512 int iTipL = 15;513 514 Sprite * l = Sprite::create("green.png");515 l->setAnchorPoint(Vec2(1.0f, 0.5f));516 l->setPosition(Vec2(-radio,0));517 mChosedShow->addChild(l);518 519 Sprite * r = Sprite::create("green.png");520 r->setAnchorPoint(Vec2(0.0f, 0.5f));521 r->setPosition(Vec2(radio,0));522 mChosedShow->addChild(r);523 524 Sprite * u = Sprite::create("green2.png");525 u->setAnchorPoint(Vec2(0.5f, 0.0f));526 u->setPosition(Vec2(0,radio));527 mChosedShow->addChild(u);528 529 Sprite * d = Sprite::create("green2.png");530 d->setAnchorPoint(Vec2(0.5f, 1.0f));531 d->setPosition(Vec2(0,-radio));532 mChosedShow->addChild(d);533 534 mChosedShow->setVisible(false);535 536 mNowType = 0;537 538 setType(1);539 540 return true;541 }542 //设置队伍 1 2543 void ChessPiece::setType(BYTE type)544 {545 if( type != mNowType )546 {547 if( 1 == type )548 {549 //initWithFile("white_point.png");550 setTexture( Sprite::create("white_point.png")->getTexture());551 }552 else553 {554 //initWithFile("black_point.png");555 setTexture( Sprite::create("black_point.png")->getTexture());556 }557 mNowType = type;558 }559 }560 561 //设置选中棋子562 void ChessPiece::setChosed(bool chose)563 {564 //目前就在棋子的周围显示绿色作为选中标志565 mChosedShow->setVisible(chose);566 }567 bool ChessPiece::getChosed()568 {569 return mChosedShow->isVisible();570 }571 bool ChessPiece::checkIsTouch(Point pos)572 {573 bool bRet = false;574 int iH = 25;575 Point now = this->getPosition();576 if( (now.x-iH) <= pos.x &&577 pos.x <= (now.x+iH) &&578 (now.y-iH) <= pos.y &&579 pos.y <= (now.y+iH))580 {581 bRet = true;582 }583 return bRet; 584 }585 Scene* HelloWorld::createScene()586 {587 // ‘scene‘ is an autorelease object588 auto scene = Scene::create();589 590 // ‘layer‘ is an autorelease object591 auto layer = HelloWorld::create();592 593 // add layer as a child to scene594 scene->addChild(layer);595 596 // return the scene597 return scene;598 }599 600 // on "init" you need to initialize your instance601 bool HelloWorld::init()602 {603 //////////////////////////////604 // 1. super init first605 if ( !Layer::init() )606 {607 return false;608 }609 610 Size visibleSize = Director::getInstance()->getVisibleSize();611 Vec2 origin = Director::getInstance()->getVisibleOrigin();612 613 auto board = Chessboard::create();614 addChild(board);615 616 /////////////////////////////617 // 2. add a menu item with "X" image, which is clicked to quit the program618 // you may modify it.619 620 // add a "close" icon to exit the progress. it‘s an autorelease object621 auto closeItem = MenuItemImage::create(622 "CloseNormal.png",623 "CloseSelected.png",624 CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));625 626 closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,627 origin.y + closeItem->getContentSize().height/2));628 629 // create menu, it‘s an autorelease object630 auto menu = Menu::create(closeItem, NULL);631 menu->setPosition(Vec2::ZERO);632 this->addChild(menu, 1);633 634 return true;635 }636 637 638 void HelloWorld::menuCloseCallback(Ref* pSender)639 {640 #if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)641 MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");642 return;643 #endif644 645 Director::getInstance()->end();646 647 #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)648 exit(0);649 #endif650 }
另外屏幕适配的地方,直接修改appDelegate.cpp
最后,附上效果图 ^^!
一起做cocos2d-x 小游戏2
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。