新建工程,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));