Cocos2d-X開發中國象棋《三》開始情境的實現,cocos2d-x《三》

來源:互聯網
上載者:User

Cocos2d-X開發中國象棋《三》開始情境的實現,cocos2d-x《三》

在前面兩篇部落格中介紹了中國象棋的功能和工程檔案,在這篇部落格中將介紹中國象棋的開始情境的實現

在寫代碼前先理清一下實現開始情境的思路:

1、開啟遊戲後進入開始情境,情境上顯示一個紅色的帥和黑色的將,並且兩個棋子在同一條直線上(兩個棋子的y座標相同)

2、當玩家單擊紅色的帥後,紅色的帥一邊向右移動一邊按照順時針方向旋轉,黑色的將一邊向左移動一邊按照逆時針方向旋轉

3、當玩家單擊黑色的將後,紅色的帥一邊向右移動一邊按照順時針方向旋轉,黑色的將一邊向左移動一邊按照逆時針方向旋轉

4、當兩個棋子相撞後進入遊戲情境(兩個棋子的距離小於或者等於棋子的直徑)

5、如果玩家單擊的是紅色的帥,玩家的棋子為紅色

6、如果玩家單擊的是黑色的將,玩家的棋子為黑色


SceneStart.h和SceneStart.cpp用於實現開始情境

實現代碼:

SceneStart.h中的代碼

#ifndef  _SceneStart_H_#define _SceneStart_H_#include "cocos2d.h"USING_NS_CC;class SceneStart : public CCLayer{public:    static CCScene* scene();    bool init();    CREATE_FUNC(SceneStart);    bool ccTouchBegan(CCTouch* pTouch, CCEvent* pEvent);    void ccTouchEnded(CCTouch* pTouch, CCEvent* pEvent);    CCSprite* _red;    CCSprite* _black;    void update(float);    //標記是否選中了紅色棋子     bool _selected;};#endif


SceneStart.cpp中的代碼

#include "SceneStart.h"#include "SceneGame.h"CCScene* SceneStart::scene(){    CCScene* scene = CCScene::create();    SceneStart* layer = SceneStart::create();    scene->addChild(layer);    return scene;}bool SceneStart::init(){    CCLayer::init();    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    CCSprite* bkr = CCSprite::create("bkg2.png");    addChild(bkr);    CCSprite* bkb = CCSprite::create("bkg1.png");    addChild(bkb);    bkr->setPosition(ccp(winSize.width / 2 - 100, winSize.height / 2));    bkb->setPosition(ccp(winSize.width / 2 + 100, winSize.height / 2));    _red = bkr;    _black = bkb;    //註冊觸摸事件    setTouchEnabled(true);    setTouchMode(kCCTouchesOneByOne);       return true;}bool SceneStart::ccTouchBegan(CCTouch* pTouch, CCEvent* pEvent){    return true;}void SceneStart::ccTouchEnded(CCTouch* pTouch, CCEvent* pEvent){     CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //獲得觸摸點的位置(座標)    CCPoint ptClick = pTouch->getLocation();    //用於判斷是否點中了棋子    bool bClickStone = false;    //當點中紅色的棋子的時候(觸摸點的位置在紅色的棋子所在的範圍內)    if(_red->boundingBox().containsPoint(ptClick))    {        //點中了紅色的棋子        this->_selected = true;        //點中了棋子        bClickStone = true;    }    //當點中黑色棋子的時候(觸摸點的位置在黑色棋子所在的範圍內)    else if(_black->boundingBox().containsPoint(ptClick))    {        //沒點中紅色棋子        this->_selected = false;        //點中了棋子        bClickStone = true;    }    //當點中了棋子的時候    if(bClickStone)    {        //移動棋子        CCMoveTo* moveTo1 = CCMoveTo::create(1, ccp(winSize.width / 2, winSize.height / 2));        CCMoveTo* moveTo2 = CCMoveTo::create(1, ccp(winSize.width / 2, winSize.height / 2));            //旋轉棋子        CCRotateBy* rotate1 =  CCRotateBy::create(1, 360);        CCRotateBy* rotate2 =  CCRotateBy::create(1, -360);        //旋轉和移動同時執行        CCSpawn* spawn1 = CCSpawn::create(moveTo1, rotate1, NULL);        CCSpawn* spawn2 = CCSpawn::create(moveTo2, rotate2, NULL);        //執行行動作        _red->runAction(spawn1);        _black->runAction(spawn2);        //啟動定時器         scheduleUpdate();    }}void SceneStart::update(float){    //擷取兩個棋子的x座標    float x1 = _red->getPositionX();    float x2 = _black->getPositionX();    //當紅色的棋子和黑色的棋子碰撞後    //兩個棋子的距離小於或等於棋子的直徑    //getContentSize().width獲得棋子的寬度(棋子的直徑)    if(abs(x1 - x2) <= _red->getContentSize().width)    {        //進入遊戲        CCDirector::sharedDirector()->replaceScene(SceneGame::scene(this->_selected));    }}

執行結果:



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.