cocos2d_x_08_遊戲_FlappyBird,cocos2dx權威指南

來源:互聯網
上載者:User

cocos2d_x_08_遊戲_FlappyBird,cocos2dx權威指南
最終:
環境版本:cocos2d-x-3.3beta0 使用內建的物理引擎計時器沒有添加,可參考【cocos2d_x_06_遊戲_一個都不能死】主情境

////  FlappyBirdScene.h//  01_cocos2d-x////  Created by beyond on 14-10-7.////#ifndef ___1_cocos2d_x__FlappyBirdScene__#define ___1_cocos2d_x__FlappyBirdScene__#include "cocos2d.h"#include "FlappyBird.h"#include "Floor.h"#include "TopBar.h"#include "BottomBar.h"USING_NS_CC;// 注意 這兒,繼承的是 Layerclass FlappyBirdScene : public cocos2d::Layer{private:    // 螢幕尺寸    Size winSize;    // 小鳥    FlappyBird *bird;    // 地板    Floor *floor;    // 頂部圓管    TopBar *topBar;    // 底部圓管    BottomBar *bottomBar;        // 用一個Node 封裝起來 所有的圓管,因為圓管在後面,要最先添加;然後才添加floor    Node *_barContainer;    private:        // 每隔 隨機的時間,建立並添加一個圓管    void addTopBar();    void addBottomBar();        // 臨時變數,用於累計 記錄 流逝的時間    int tempTimeDelta;    // 總共的時間間隔 (即 時間delta累計到 該間隔時,建立並添加一個圓管)    int totalIntervalTime;        // 每添加一個新的障礙物之後,需重設 用於累計 記錄 流逝的時間 的變數    void resetTempTimeDelta();    public:    // c++裡面沒有id類型, 所以 返回類的執行個體對象的 指標    static cocos2d::Scene* createScene();    // 以下是 不同點:cocos2d-x的 'init' 方法 返回 bool    // 而cocos2d-iphone 返回 'id' 類型    virtual bool init();    // 宏 自動實現 "靜態 create()方法"    CREATE_FUNC(FlappyBirdScene);        // 時鐘方法    // 在情境的時鐘方法中,更新\控制  每一個遊戲控制器的時鐘方法    virtual void update(float dt);        // 添加小鳥    void addBird();    // 添加地板    void addFloor();            };#endif /* defined(___1_cocos2d_x__FlappyBirdScene__) */


////  FlappyBirdScene.cpp//  01_cocos2d-x////  Created by beyond on 14-10-7.////#include "FlappyBirdScene.h"#include "GameOverScene.h"USING_NS_CC;Scene* FlappyBirdScene::createScene(){    // 'scene' 自動釋放    // 使用cocos2d 內建的物理引擎    auto scene = Scene::createWithPhysics();    // 顯示 調試用的 剛體 邊線    // scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);    // 調整重力加速度    scene->getPhysicsWorld()->setGravity(Vec2(0, -1000));        // 'layer' 自動釋放    auto layer = FlappyBirdScene::create();    // 將圖層 添加到情境中    scene->addChild(layer);    // 返回 填充好圖層的 情境    return scene;}// 在 "init" 方法中,執行個體化自己要用的精靈對象bool FlappyBirdScene::init(){    // 1. 調用父類的init , cpp 沒有super,直接寫父類名    if ( !Layer::init() ) return false;    // 螢幕尺寸    winSize = Director::getInstance()->getVisibleSize();            // 2.添加小鳥    addBird();    // 2.添加地板    addFloor();        // 初始化時,添加一個新的圓管    tempTimeDelta = totalIntervalTime;        // 開啟訊息調度    scheduleUpdate();    // ********************************************    // 物理碰撞檢測 「PhysicsContact」    auto listener = EventListenerPhysicsContact::create();    // 開始碰撞 遊戲結束    listener->onContactBegin = [this](PhysicsContact & contact){        // 取消 訊息調度        this->unscheduleUpdate();        // 切換至Game Over情境        Director::getInstance()->replaceScene(GameOverScene::createScene());        return true;    };    // 向事件分發器,註冊listener    Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);    // ********************************************    // 使用者單點觸摸 jump high 【TouchOneByOne】    auto touchListener = EventListenerTouchOneByOne::create();    // 開始觸摸 原地 跳一下    touchListener->onTouchBegan = [this](Touch * t,Event * e){        // 每點一下,原地跳一下        bird->getPhysicsBody()->setVelocity(Vec2(0, 400));        log(">>>click<<<");        return false;    };    // 向事件分發器,註冊listener    Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(touchListener, this);    return true;}// 在 "init" 方法中,添加小鳥void FlappyBirdScene::addBird(){    //**************************************    bird = FlappyBird::create();    // 螢幕中間    bird->setPosition(winSize.width/2, winSize.height/2);    // 添加到Layer    addChild(bird);}// 在 "init" 方法中,添加地板void FlappyBirdScene::addFloor(){    //**************************************    floor = Floor::create();    // 螢幕底部    floor->setPosition(winSize.width/2, floor->getContentSize().height/2);    // 添加到Layer    addChild(floor);}#pragma mark - 時鐘方法void FlappyBirdScene::update(float dt){    // 每隔一段時間,添加 上圓管和下圓管    // 臨時變數,用於累計 記錄 流逝的時間    tempTimeDelta++;    // 總共的時間間隔 (即 時間delta累計到 該間隔時,建立並添加一個障礙物)    if (tempTimeDelta >= totalIntervalTime)    {        // 每添加一個新的障礙物之後,需重設 用於累計 記錄 流逝的時間 的變數        resetTempTimeDelta();        // 每隔 隨機的時間,建立並添加一個障礙物        addBottomBar();        addTopBar();    }}// 每添加一個新的障礙物之後,需重設 用於累計 記錄 流逝的時間 的變數void FlappyBirdScene::resetTempTimeDelta(){    tempTimeDelta = 0;    totalIntervalTime = (rand()%50) + 20;}// 建立 並 添加 底部圓管  (在隨機的 時間 間隔 之後 )void FlappyBirdScene::addBottomBar(){    bottomBar = BottomBar::create();    addChild(bottomBar);    // 螢幕外    bottomBar->setPositionX(winSize.width );    // 注意 底部圓管的y值是 在地板之上    // 即 bottomBar的半高    bottomBar->setPositionY(bottomBar->getContentSize().height/2 + floor->getContentSize().height);}// 建立 並 添加 頂部圓管  (在隨機的 時間 間隔 之後 )void FlappyBirdScene::addTopBar(){    // 開口大小 為 70 ~ 130    int margin = (rand()%60) + 70;        topBar = TopBar::create();    addChild(topBar);    // 螢幕外    topBar->setPositionX(winSize.width );    // 注意 頂部圓管的y值是    // 即 底部圓管的高 + 400 + 自己的半高 + 地板的高    topBar->setPositionY(topBar->getContentSize().height/2 + margin +bottomBar->getContentSize().height +floor->getContentSize().height);}


封閉的精靈Bird
////  FlappyBird.h//  01_cocos2d-x////  Created by beyond on 14-10-7.////#ifndef ___1_cocos2d_x__FlappyBird__#define ___1_cocos2d_x__FlappyBird__#include <cocos2d.h>USING_NS_CC;class FlappyBird:public Sprite {    public:    // 宏,靜態create方法,內部會調用init方法    CREATE_FUNC(FlappyBird);    virtual bool init();    };#endif /* defined(___1_cocos2d_x__FlappyBird__) */


////  FlappyBird.cpp//  01_cocos2d-x////  Created by beyond on 14-10-7.////#include "FlappyBird.h"bool FlappyBird::init(){    // 父類的init方法    Sprite::init();    // 執行 幀動畫 一直拍打翅膀 撲騰著飛 RepeatForever    setTexture("bird.png");    // 圖片的尺寸    Size s = Size(34, 34);    // 精靈的大小    setContentSize(s);        // 設定物理世界的剛體body    setPhysicsBody(PhysicsBody::createBox(s));    // 剛體不允許 旋轉    getPhysicsBody()->setRotationEnable(false);    // 重要~~~若想參與 碰撞,必須綁定一個碰撞標識    getPhysicsBody()->setContactTestBitmask(1);        return true;}


地板Floor
////  Floor.h//  01_cocos2d-x////  Created by beyond on 14-10-7.////  地板#ifndef ___1_cocos2d_x__Floor__#define ___1_cocos2d_x__Floor__#include <cocos2d.h>USING_NS_CC;class Floor:public Sprite {    public:    // 宏,靜態create方法,內部會調用init方法    CREATE_FUNC(Floor);    virtual bool init();    };#endif /* defined(___1_cocos2d_x__Floor__) */


////  Floor.cpp//  01_cocos2d-x////  Created by beyond on 14-10-7.////#include "Floor.h"bool Floor::init(){    // 父類的init方法    Sprite::init();    // 地板圖片    setTexture("floor.png");    // 圖片的尺寸    Size s = Size(640, 208);    // 精靈的大小    setContentSize(s);    // 設定物理世界的剛體body    setPhysicsBody(PhysicsBody::createBox(s));    // 剛體不允許 旋轉    getPhysicsBody()->setRotationEnable(false);    // 重要~~~若想參與 碰撞,必須綁定一個碰撞標識    getPhysicsBody()->setContactTestBitmask(1);    // 不是動態剛體 即:是靜態剛體    getPhysicsBody()->setDynamic(false);    // *****************************    // 播放幀動畫    // 容器,數組,裡面存放的是精靈幀    Vector<SpriteFrame*> vec;    SpriteFrame *frame1 = SpriteFrame::create("floor.png", Rect(0, 0, 640, 208));    SpriteFrame *frame2 = SpriteFrame::create("floor2.png", Rect(0, 0, 640, 208));    // 將小精靈幀  加入容器    vec.pushBack(frame1);    vec.pushBack(frame2);    // 建立 Animation    Animation *animation = Animation::createWithSpriteFrames(vec,0.1f);    // 建立 Animate    Animate *animate = Animate::create(animation);    // 執行序列幀動畫    Sequence *seq = Sequence::create(animate,animate->reverse(), NULL);    runAction(RepeatForever::create(seq));        return true;}


TopBar和BottomBar還可以抽取
////  TopBar.h//  01_cocos2d-x////  Created by beyond on 14-10-7.////  圓管 內部分為上圓管和下圓管#ifndef ___1_cocos2d_x__TopBar__#define ___1_cocos2d_x__TopBar__#include <cocos2d.h>USING_NS_CC;class TopBar:public Sprite {public:    // 宏,靜態create方法,內部會調用init方法    CREATE_FUNC(TopBar);    virtual bool init();    // 時鐘方法,內部會 讓 障礙物不斷地向左移動    void update(float dt);};#endif /* defined(___1_cocos2d_x__TopBar__) */


////  TopBar.cpp//  01_cocos2d-x////  Created by beyond on 14-10-7.////#include "TopBar.h"bool TopBar::init(){    // 父類的init方法    Sprite::init();    setTexture("top_bar2.png");    // 圖片的尺寸    Size s = Size(52, 450);    // 精靈的大小    setContentSize(s);        // 設定物理世界的剛體body    setPhysicsBody(PhysicsBody::createBox(s));    // 剛體不允許 旋轉    getPhysicsBody()->setRotationEnable(false);    // 重要~~~若想參與 碰撞,必須綁定一個碰撞標識    getPhysicsBody()->setContactTestBitmask(1);    // 不是動態剛體 即:是靜態剛體    getPhysicsBody()->setDynamic(false);    // ***************************************    // 開啟時鐘方法    scheduleUpdate();    return true;}#pragma mark - 時鐘方法// 時鐘方法,內部會 讓 障礙物不斷地向左移動void TopBar::update(float dt){    this->setPositionX(getPositionX()-20);    // 移動到螢幕外邊時,就停止訊息調度,並且移除    if (getPositionX()<0)    {        log("remove top bar");        unscheduleUpdate();        removeFromParent();    }}


////  BottomBar.h//  01_cocos2d-x////  Created by beyond on 14-10-7.////  圓管 內部分為上圓管和下圓管#ifndef ___1_cocos2d_x__BottomBar__#define ___1_cocos2d_x__BottomBar__#include <cocos2d.h>USING_NS_CC;class BottomBar:public Sprite {public:    // 宏,靜態create方法,內部會調用init方法    CREATE_FUNC(BottomBar);    virtual bool init();        // 時鐘方法,內部會 讓 底部圓管 不斷地向左移動    void update(float dt);    };#endif /* defined(___1_cocos2d_x__BottomBar__) */


////  BottomBar.cpp//  01_cocos2d-x////  Created by beyond on 14-10-7.////#include "BottomBar.h"bool BottomBar::init(){    // 父類的init方法    Sprite::init();        setTexture("bottom_bar.png");    // 圖片的尺寸    Size s = Size(52, 319);    // 精靈的大小    setContentSize(s);        // 設定物理世界的剛體body    setPhysicsBody(PhysicsBody::createBox(s));    // 剛體不允許 旋轉    getPhysicsBody()->setRotationEnable(false);    // 重要~~~若想參與 碰撞,必須綁定一個碰撞標識    getPhysicsBody()->setContactTestBitmask(1);    // 不是動態剛體 即:是靜態剛體    getPhysicsBody()->setDynamic(false);    // ***************************************    // 開啟時鐘方法    scheduleUpdate();    return true;}#pragma mark - 時鐘方法// 時鐘方法,內部會 讓 障礙物不斷地向左移動void BottomBar::update(float dt){    this->setPositionX(getPositionX()-20);    // 移動到螢幕外邊時,就停止訊息調度,並且移除    if (getPositionX()<0)    {        unscheduleUpdate();        removeFromParent();    }}




FLAPPY BIRD中文是什遊戲

flappy bird(瘋狂的小鳥或像素鳥)由一位來自越南河內的獨立遊戲開發人員阮哈東開發,是一款形式簡易但難度極高的休閒遊戲。簡單並不粗糙的8位元像素畫面、超級瑪麗遊戲中的綠色通道、眼神有點獃滯的小鳥和幾朵白雲便構成了遊戲的一切。你需要不斷控制點擊螢幕的頻率來調節小鳥的飛行高度和降落速度,讓小鳥順利地通過畫面右端的通道,如果你不小心擦碰到了通道的話,遊戲便宣告結束。

通過pp助手可以直接下載,還有輔助刷分教程



 
flappy bird什遊戲

lappy bird由一位來自越南河內的獨立遊戲開發人員阮哈東開發,是一款簡易卻難度極高的休閒遊戲。簡單並不粗糙的8位元像素畫面、超級瑪麗遊戲中的綠色通道、眼神有點獃滯的小鳥和幾朵白雲便構成了遊戲的一切。你需要不斷控制點擊螢幕的頻率來調節小鳥的飛行高度和降落速度,讓小鳥順利的通過畫面右端的通道,如果你不小心擦碰到了通道的話,遊戲便宣告結束。2月10日訊息,據國外媒體報道,近期火爆的手機遊戲《Flappy Bird》已被開發人員本人從蘋果應用網店下架。屆時國內使用者仍可以通過 百度手機小幫手,PP助手下載安裝。[1]
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.