现在的位置: 首页 > 综合 > 正文

飞行游戏demo

2013年04月22日 ⁄ 综合 ⁄ 共 7776字 ⁄ 字号 评论关闭

新建工程,planeDemo。

首先是进入游戏的第一屏,主菜单屏。

新建类HMenu.并删除HelloWorldScene。

修改AppDelegate.cpp

boolAppDelegate::applicationDidFinishLaunching(),让它首先加载HMenu类。

// create a scene. it's an autorelease object

   CCScene *pScene =HMenu::scene();

    // run

    pDirector->runWithScene(pScene);

将游戏调整为竖屏。

修改RootViewController.mm

*/

// Override to allow orientations other than the default portrait orientation.

// This method is deprecated on ios6

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

   // return UIInterfaceOrientationIsLandscape( interfaceOrientation );

    returnUIInterfaceOrientationIsPortrait(interfaceOrientation);

}

// For ios6, use supportedInterfaceOrientations & shouldAutorotate instead

//- (NSUInteger) supportedInterfaceOrientations{

//#ifdef __IPHONE_6_0

//    return UIInterfaceOrientationMaskLandscape;

//#endif

//}

HMenu添加背景图片

CCSize size=CCDirector::sharedDirector()->getWinSize();

    

    //创建menu背景

   CCSprite *menuBg=CCSprite::create("menu_bg.png");

    menuBg->setPosition(ccp(size.width*0.5,size.height*0.5));

   addChild(menuBg);

添加背景音乐

SimpleAudioEngine::sharedEngine()->playBackgroundMusic("menuMusic.mp3",true);


添加菜单项

//创建菜单项

   CCMenuItem *itemPlay=CCMenuItemImage::create("play_nor.png","play_pre.png",this,menu_selector(HMenu::playIsPressed));

    

   CCMenuItem *itemScore=CCMenuItemImage::create("score_nor.png","score_pre.png",this,menu_selector(HMenu::scoreIsPressed));

    itemScore->setPosition(ccp(0, -itemScore->getContentSize().height-20));

    

   CCMenuItem *itemAbout=CCMenuItemImage::create("about_nor.png","about_pre.png",this,menu_selector(HMenu::aboutIsPressed));

    itemAbout->setPosition(ccp(0, -itemScore->getContentSize().height*2-40));

    

    

   CCMenu *menu=CCMenu::create(itemPlay,itemScore,itemAbout,NULL);

   addChild(menu);

新建类HAbout

//

//  HAbout.h

//  planeDemo

//

//  Created by cloud on 13-4-12.

//

//

#ifndef __planeDemo__HAbout__

#define __planeDemo__HAbout__

#include "cocos2d.h"

class HAbout:publiccocos2d::CCLayer

{

    // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)

   virtualbool init();

public:

    // there's no 'id' in cpp, so we recommend to return the class instance pointer

   staticcocos2d::CCScene* scene();

    

    // preprocessor macro for "static create()" constructor ( node() deprecated )

    CREATE_FUNC(HAbout);

   void returnToMainMenu();

    

};

#endif /* defined(__planeDemo__HAbout__) */

//

//  HAbout.cpp

//  planeDemo

//

//  Created by cloud on 13-4-12.

//

//

#include "HAbout.h"

#include "HMenu.h"

#include "SimpleAudioEngine.h"

using namespace
cocos2d;

using namespace
CocosDenshion;

CCScene* HAbout::scene()

{

    // 'scene' is an autorelease object

   CCScene *scene =CCScene::create();

    

    // 'layer' is an autorelease object

   HAbout *layer =HAbout::create();

    

    // add layer as a child to scene

    scene->addChild(layer);

    

    // return the scene

   return scene;

}

boolHAbout::init()

{

    //////////////////////////////

    // 1. super init first

   if ( !CCLayer::init() )

    {

        return
false;

    }

    CCSize size=CCDirector::sharedDirector()->getWinSize();

    

    //创建menu背景

   CCSprite *menuBg=CCSprite::create("about_bg.png");

    menuBg->setPosition(ccp(size.width*0.5,size.height*0.5));

   addChild(menuBg);

    

    //播放背景音乐

    SimpleAudioEngine::sharedEngine()->playBackgroundMusic("menuMusic.mp3",true);

    

    //创建菜单项

    CCLabelTTF *ttback=CCLabelTTF::create("返回主主菜单","Helvetica-Bold",23);

    ttback->setColor(ccc3(255,255,0));

    

   CCMenuItemLabel *itemReturn=CCMenuItemLabel::create(ttback,this,menu_selector(HAbout::returnToMainMenu));

    itemReturn->setPosition(ccp(0, -200));

        

    

   CCMenu *menu=CCMenu::create(itemReturn,NULL);

   addChild(menu);

    return
true;

}

voidHAbout::returnToMainMenu()

{

    CCDirector::sharedDirector()->replaceScene(CCTransitionPageTurn::create(1.5,HMenu::scene(),true));

}

新建类HScore

//

//  HScore.h

//  planeDemo

//

//  Created by cloud on 13-4-12.

//

//

#ifndef __planeDemo__HScore__

#define __planeDemo__HScore__

#include <iostream>

#include "cocos2d.h"

class HScore:publiccocos2d::CCLayer

{

    // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)

   virtualbool init();

public:

    // there's no 'id' in cpp, so we recommend to return the class instance pointer

   staticcocos2d::CCScene* scene();

    

    // preprocessor macro for "static create()" constructor ( node() deprecated )

    CREATE_FUNC(HScore);

   void returnToMainMenu();

    

};

#endif /* defined(__planeDemo__HScore__) */

//

//  HScore.cpp

//  planeDemo

//

//  Created by cloud on 13-4-12.

//

//

#include "HScore.h"

#include "HAbout.h"

#include "HMenu.h"

#include "SimpleAudioEngine.h"

using namespace
cocos2d;

using namespace
CocosDenshion;

CCScene* HScore::scene()

{

    // 'scene' is an autorelease object

   CCScene *scene =CCScene::create();

    

    // 'layer' is an autorelease object

   HScore *layer =HScore::create();

    

    // add layer as a child to scene

    scene->addChild(layer);

    

    // return the scene

   return scene;

}

boolHScore::init()

{

    //////////////////////////////

    // 1. super init first

   if ( !CCLayer::init() )

    {

        return
false;

    }

    CCSize size=CCDirector::sharedDirector()->getWinSize();

    

    //创建menu背景

   CCSprite *menuBg=CCSprite::create("score_bg.png");

    menuBg->setPosition(ccp(size.width*0.5,size.height*0.5));

   addChild(menuBg);

   

    //添加一个文本获取存储的积分

   std::string scoreStr="";

    std::string score=CCUserDefault::sharedUserDefault()->getStringForKey("user_score","-1").c_str();

   if (atoi(score.c_str())!=-1) {

        scoreStr+=score;

    }

   else

    {

        scoreStr="0";

    }

    //显示分数

   CCLabelTTF *ttScore=CCLabelTTF::create(scoreStr.c_str(),"Helvetica",23);

    ttScore->setPosition(ccp(size.width*0.5-50,size.height*0.5+40));

    ttScore->setColor(ccc3(255,0,0));

   addChild(ttScore);

    

    

    

    //创建菜单项

    CCLabelTTF *ttback=CCLabelTTF::create("返回主主菜单","Helvetica-Bold",23);

    ttback->setColor(ccc3(255,255,0));

    

   CCMenuItemLabel *itemReturn=CCMenuItemLabel::create(ttback,this,menu_selector(HScore::returnToMainMenu));

    itemReturn->setPosition(ccp(0, -200));

    

    

   CCMenu *menu=CCMenu::create(itemReturn,NULL);

   addChild(menu);

    return
true;

}

voidHScore::returnToMainMenu()

{

    CCDirector::sharedDirector()->replaceScene(CCTransitionFlipX::create(1.5,HMenu::scene()));

}

新建类HWorld,这个是游戏的主类。

新建类HMap,这个类来处理游戏中的地图显示。

//

//  HMap.h

//  planeDemo

//

//  Created by cloud on 13-4-12.

//

//

#ifndef __planeDemo__HMap__

#define __planeDemo__HMap__

#include "cocos2d.h"

typedef enum{

    tag_oneImg,

    tag_twoImg,

}tagMap;

class HMap:publiccocos2d::CCLayer

{

public:

   //实例化函数

   staticHMap *createMap(constchar* fileName);

    

private:

    //初始化

   void mapInit(constchar* fileName);

   //逻辑

   void update(float time);

    //生命周期函数的退出

   virtualvoid onExit();

    

    

};

#endif /* defined(__planeDemo__HMap__) */

//

//  HMap.cpp

//  planeDemo

//

//  Created by cloud on 13-4-12.

//

//

#include "HMap.h"

using namespace
cocos2d;

//实例化函数

HMap *HMap::createMap(constchar* fileName)

{

   HMap *map=newHMap();

   if (map && map->create()) {

        map->autorelease();

        map->mapInit(fileName);

       return map;

    }

    CC_SAFE_DELETE(map);

    return
NULL;

}

//初始化

voidHMap::mapInit(constchar* fileName)

{

    CCSize size=CCDirector::sharedDirector()->getWinSize();

    //创建第一张地图背景

   CCSprite *turnImg=CCSprite::create(fileName);

    turnImg->setPosition(ccp(turnImg->getContentSize().width*0.5,turnImg->getContentSize().height*0.5));

   this->addChild(turnImg,0,tag_oneImg);

    

    //创建第二张地图背景,用于交替循环

   CCSprite *turnImg2=CCSprite::create(fileName);

    turnImg2->setPosition(ccp(turnImg->getContentSize().width*0.5,turnImg->getContentSize().height*1.5));

   this->addChild(turnImg2,0,tag_twoImg);

   //更新

    this->scheduleUpdate();

    

    

    

}

//逻辑

voidHMap::update(float time)

{

    CCSize size=CCDirector::sharedDirector()->getWinSize();

    CCSprite *sp1=(CCSprite*)this->getChildByTag(tag_oneImg);

    //当第一张图超出屏幕外,将其重置坐标,接在当前显示的图片下

   if (sp1->getPositionY()<=-sp1->getContentSize().height*0.5)

    {

        sp1->setPosition(ccp(sp1->getContentSize().width*0.5,sp1->getContentSize().height*1.5f));

    }

   else

    {

        sp1->setPosition(ccpAdd(sp1->getPosition(),ccp(0,-1)));

    }

                  

    CCSprite *sp2=(CCSprite*)this->getChildByTag(tag_twoImg);

    //当第二张图超出屏幕外,将其重置坐标,接在当前显示的图片下

   if (sp2->getPositionY()<=-sp2->getContentSize().height*0.5)

    {       

        sp2->setPosition(ccp(sp2->getContentSize().width*0.5,sp2->getContentSize().height*1.5f));

 

抱歉!评论已关闭.