cocos2d-x 《Flappy Bird 》一、滚动背景的实现

《flappy bird》是由来自越南的独立游戏开发者Dong Nguyen所开发的作品,游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍,而这只鸟其实是根本不会飞的……所以玩家每点击一下小鸟就会飞高一点,不点击就会下降,玩家必须控制节奏,拿捏点击屏幕的时间点,让小鸟能在落下的瞬间跳起来,恰好能够通过狭窄的水管缝隙,只要稍一分神,马上就会失败阵亡。

图片资源提取后使用PS5 处理,Zwoptex 重新打包。

======================================================================================

开发环境:

  Cocos2d-x  cocos2d-x-2.2.1

  MacBook Pro 13‘  10.9

  Xcode 5.0.2

  iPhone5   IOS 7.0.4

======================================================================================

一、效果图


二、GameLayer层 头文件

//
//  GameLayer.h
//  Flappy
//
//  Created by yuzai on 14-2-12.
//
//

#ifndef __Flappy__GameLayer__
#define __Flappy__GameLayer__

#include "cocos2d.h"
#include "SimpleAudioEngine.h"
using namespace cocos2d;
class GameLayer:public cocos2d::CCLayer
{
public:
	GameLayer(void);
	~GameLayer(void);
    CCSprite *bg;
    CCSprite *land1;
    CCSprite *land2;
    void setBackgroud(unsigned int bg);
	CREATE_FUNC(GameLayer);
	virtual bool init();
    virtual void update(float time);
 
private:
    
    
    
};

#endif /* defined(__Flappy__GameLayer__) */

三、GameLayer层实现

//
//  GameLayer.cpp
//  Flappy
//
//  Created by yuzai on 14-2-12.
//
//

#include "GameLayer.h"
GameLayer::GameLayer(void)
{
    
}

GameLayer::~GameLayer(void)
{
}
bool GameLayer::init()
{
    if (!CCLayer::init())
    {
        return false;
    }
    //屏幕宽高比 首先 适配IPHONE5
    CCSize frameSize = CCEGLView::sharedOpenGLView()->getFrameSize();
    float scales = (float) frameSize.width/ 288;
    //CCSize winSize=CCDirector::sharedDirector()->getWinSize();
    CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("res/default.plist");
    CCSpriteFrame *bg1Frame=CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("bg_day.png");
    bg=CCSprite::create();
    bg->setAnchorPoint(ccp(0, 0));
    bg->setDisplayFrame(bg1Frame);
    bg->setScale(scales);
    bg->setPosition(ccp(0,0));
    addChild(bg);
    
    //2.
    
    CCSpriteFrame *landFrame=CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("land.png");
    land1=CCSprite::create();
    land1->setAnchorPoint(ccp(0, 0));
    land1->setDisplayFrame(landFrame);
    land1->setScale(scales);
    land1->setPosition(ccp(0, 0));
    addChild(land1,1);
    land2=CCSprite::create();
    land2->setAnchorPoint(ccp(0, 0));
    land2->setDisplayFrame(landFrame);
    land2->setScale(scales);
    land2->setPosition(ccp(frameSize.width, 0));
    addChild(land2,1);
    
    scheduleUpdate();
    return true;
}
//改变背景
void GameLayer::setBackgroud(unsigned int bg)
{
    
    switch (bg) {
        case 1:
        {
            
        }
            break;
            
        default:
            break;
    }
}

void GameLayer::update(float time){
    //land移动逻辑
    CCSize frameSize = CCEGLView::sharedOpenGLView()->getFrameSize();

    float dif=4;
    land1->setPosition(ccp(land1->getPositionX()-dif,land1->getPositionY()));
    land2->setPosition(ccp(land2->getPositionX()-dif,land2->getPositionY()));
    if (land2->getPositionX()<0) {
        float temp=land2->getPositionX()+frameSize.width;
        land1->setPosition(ccp(temp,land2->getPositionY()));
    }
    if (land1->getPositionX()<0) {
        float temp=land1->getPositionX()+frameSize.width;
        land2->setPosition(ccp(temp,land1->getPositionY()));
    }
    
}


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。