在网上down了一个塔防游戏的代码,试着分析,并且在Android手机上跑起来了,今天和大家分享一下!
源码:
AppDelegate.cpp
bool AppDelegate::applicationDidFinishLaunching()
{
// initialize director
CCDirector *pDirector = CCDirector::sharedDirector();
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
// turn on display FPS
//pDirector->setDisplayStats(true);
// set FPS. the default value is 1.0/60 if you don't call this
pDirector->setAnimationInterval(1.0 / 60);
// create a scene. it's an autorelease object
//CCScene *pScene = HelloWorld::scene();
CCScene *pScene = HMenu::scene();
// run
pDirector->runWithScene(pScene);
return true;
}
main.cpp
eglView->setFrameSize(480, 320);
进入游戏主界面:
主菜单源码:
HMenu.h
#pragma once
#include "cocos2d.h"
class HMenu:public cocos2d::CCLayer
{
// Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
virtual bool init();
public:
// there's no 'id' in cpp, so we recommend to return the class instance pointer
static cocos2d::CCScene* scene();
// preprocessor macro for "static create()" constructor ( node() deprecated )
CREATE_FUNC(HMenu);
void playIsPressed(CCObject* sender);
void scoreIsPressed(CCObject* sender);
void aboutIsPressed(CCObject* sender);
void exitIsPressed(CCObject* sender);
};
Hmenu.cpp
#include "HMenu.h"
#include "HAbout.h"
#include "HScore.h"
#include "HWin.h"
#include "HLose.h"
#include "HWorld.h"
#include "SimpleAudioEngine.h"
using namespace cocos2d;
using namespace CocosDenshion;
CCScene* HMenu::scene()
{
// 'scene' is an autorelease object
CCScene *scene = CCScene::create();
// 'layer' is an autorelease object
HMenu *layer = HMenu::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
bool HMenu::init()
{
//
// 1. super init first
if ( !CCLayer::init() )
{
return false;
}
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));
itemPlay->setPosition(ccp(0, 60));
CCMenuItem *itemScore=CCMenuItemImage::create("score_nor.png", "score_pre.png", this, menu_selector(HMenu::scoreIsPressed));
itemScore->setPosition(ccp(0, -itemScore->getContentSize().height+40));
CCMenuItem *itemAbout=CCMenuItemImage::create("about_nor.png", "about_pre.png", this, menu_selector(HMenu::aboutIsPressed));
itemAbout->setPosition(ccp(0, -itemScore->getContentSize().height*2+20));
CCMenuItem *itemExit=CCMenuItemImage::create("exit_nor.png", "exit_pre.png", this, menu_selector(HMenu::exitIsPressed));
itemExit->setPosition(ccp(0, -itemAbout->getContentSize().height*2-40));
//CCMenu *menu=CCMenu::create(itemPlay,itemScore,itemAbout,NULL);
CCMenu *menu=CCMenu::create(itemPlay,itemScore,itemAbout,itemExit,NULL);
addChild(menu);
return true;
}
void HMenu::playIsPressed(CCObject* sender)
{
CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(1.5, HWorld::scene()));
}
void HMenu::scoreIsPressed(CCObject* sender)
{
CCDirector::sharedDirector()->replaceScene(CCTransitionJumpZoom::create(1.5,HScore::scene()));
}
void HMenu::aboutIsPressed(CCObject* sender)
{
CCDirector::sharedDirector()->replaceScene(CCTransitionFadeBL::create(1.5,HAbout::scene()));
}
void HMenu::exitIsPressed(CCObject* sender)
{
CCDirector::sharedDirector()->end();
}
成绩界面:
HScore.h
#pragma once
#include "cocos2d.h"
class HScore:public cocos2d::CCLayer
{
// Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
virtual bool init();
public:
// there's no 'id' in cpp, so we recommend to return the class instance pointer
static cocos2d::CCScene* scene();
// preprocessor macro for "static create()" constructor ( node() deprecated )
CREATE_FUNC(HScore);
//void returnToMainMenu();
void returnToMainMenu(CCObject* sender);
};
HScore.cpp
#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;
}
bool HScore::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+70));
ttScore->setColor(ccc3(255, 0, 0));
addChild(ttScore);
//创建菜单项
// CCLabelTTF *ttback=CCLabelTTF::create("返回主主菜单", "Helvetica-Bold", 23);
// ttback->setColor(ccc3(255, 255, 0));
std::string str;
str="Back";
//CCMenuItemLabel *itemReturn=CCMenuItemLabel::create(ttback, this, menu_selector(HScore::returnToMainMenu));
CCMenuItemFont *itemReturn=CCMenuItemFont::create(str.c_str(), this, menu_selector(HScore::returnToMainMenu));
itemReturn->setPosition(ccp(0, -120));
CCMenu *menu=CCMenu::create(itemReturn,NULL);
addChild(menu);
return true;
}
//void HScore::returnToMainMenu()
void HScore::returnToMainMenu(CCObject* sender)
{
CCDirector::sharedDirector()->replaceScene(CCTransitionFlipX::create(1.5, HMenu::scene()));
}
关于界面
HAbout.h
#pragma once
#include "cocos2d.h"
class HAbout:public cocos2d::CCLayer
{
// Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
virtual bool init();
public:
// there's no 'id' in cpp, so we recommend to return the class instance pointer
static cocos2d::CCScene* scene();
// preprocessor macro for "static create()" constructor ( node() deprecated )
CREATE_FUNC(HAbout);
void returnToMainMenu(CCObject* sender);
};
HAbout.cpp
#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;
}
bool HAbout::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);
//创建菜单项
// CCLabelTTF *ttback=CCLabelTTF::create("返回主主菜单", "Helvetica-Bold", 23);
//ttback->setColor(ccc3(255, 255, 0));
// ttback->setColor(ccc3(0, 255, 0));
std::string str;
str="Back";
//CCMenuItemLabel *itemReturn=CCMenuItemLabel::create(ttback, this, menu_selector(HAbout::returnToMainMenu));
CCMenuItemFont *itemReturn=CCMenuItemFont::create(str.c_str(), this, menu_selector(HAbout::returnToMainMenu));
itemReturn->setPosition(ccp(0, -120));
CCMenu *menu=CCMenu::create(itemReturn,NULL);
addChild(menu,2);
return true;
}
void HAbout::returnToMainMenu(CCObject* sender)
{
CCDirector::sharedDirector()->replaceScene(CCTransitionPageTurn::create(1.5, HMenu::scene(), true));
}
成功界面:
HWin.h
#pragma once
#include "cocos2d.h"
class HWin:public cocos2d::CCLayerColor
{
// Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
virtual bool init();
public:
// there's no 'id' in cpp, so we recommend to return the class instance pointer
static cocos2d::CCScene* scene();
// preprocessor macro for "static create()" constructor ( node() deprecated )
CREATE_FUNC(HWin);
//void returnToMainMenu();
void returnToMainMenu(CCObject* sender);
};
HWin.cpp
#include "HMenu.h"
#include "HWin.h"
#include "SimpleAudioEngine.h"
using namespace cocos2d;
using namespace CocosDenshion;
CCScene* HWin::scene()
{
// 'scene' is an autorelease object
CCScene *scene = CCScene::create();
// 'layer' is an autorelease object
HWin *layer = HWin::create();
//layer->setColor(ccc3(255, 255, 255));
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
bool HWin::init()
{
//
// 1. super init first
if ( !CCLayerColor::initWithColor(ccc4(128, 0, 0, 255)) )
{
return false;
}
CCSize size=CCDirector::sharedDirector()->getWinSize();
//创建menu背景
CCSprite *menuBg=CCSprite::create("game_win.png");
menuBg->setPosition(ccp(size.width*0.5,size.height*0.5));
addChild(menuBg);
//创建菜单项
//CCLabelTTF *ttback=CCLabelTTF::create("返回主主菜单", "Helvetica-Bold", 23);
//ttback->setColor(ccc3(255, 255, 0));
std::string str;
str="Back";
//CCMenuItemLabel *itemReturn=CCMenuItemLabel::create(ttback, this, menu_selector(HWin::returnToMainMenu));
CCMenuItemFont *itemReturn=CCMenuItemFont::create(str.c_str(), this, menu_selector(HWin::returnToMainMenu));
itemReturn->setPosition(ccp(0, -120));
CCMenu *menu=CCMenu::create(itemReturn,NULL);
addChild(menu,2);
return true;
}
//void HWin::returnToMainMenu()
void HWin::returnToMainMenu(CCObject* sender)
{
CCDirector::sharedDirector()->replaceScene(CCTransitionPageTurn::create(1.5, HMenu::scene(), true));
}
失败界面:
HLose.h
#pragma once
#include "cocos2d.h"
class HLose:public cocos2d::CCLayerColor
{
// Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
virtual bool init();
public:
// there's no 'id' in cpp, so we recommend to return the class instance pointer
static cocos2d::CCScene* scene();
// preprocessor macro for "static create()" constructor ( node() deprecated )
CREATE_FUNC(HLose);
//void returnToMainMenu();
void returnToMainMenu(CCObject* sender);
};
HLose.cpp
#include "HLose.h"
#include "HMenu.h"
#include "SimpleAudioEngine.h"
using namespace cocos2d;
using namespace CocosDenshion;
CCScene* HLose::scene()
{
// 'scene' is an autorelease object
CCScene *scene = CCScene::create();
// 'layer' is an autorelease object
HLose *layer = HLose::create();
//layer->setColor(ccc3(255, 255, 255));
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
bool HLose::init()
{
//
// 1. super init first
if ( !CCLayerColor::initWithColor(ccc4(128, 0, 0, 255)))
{
return false;
}
CCSize size=CCDirector::sharedDirector()->getWinSize();
//创建menu背景
CCSprite *menuBg=CCSprite::create("game_lost.png");
menuBg->setPosition(ccp(size.width*0.5,size.height*0.5));
addChild(menuBg);
//创建菜单项
//CCLabelTTF *ttback=CCLabelTTF::create("返回主主菜单", "Helvetica-Bold", 23);
//ttback->setColor(ccc3(255, 255, 0));
std::string str;
str="Back";
//CCMenuItemLabel *itemReturn=CCMenuItemLabel::create(ttback, this, menu_selector(HLose::returnToMainMenu));
CCMenuItemFont *itemReturn=CCMenuItemFont::create(str.c_str(), this, menu_selector(HLose::returnToMainMenu));
itemReturn->setPosition(ccp(0, -120));
CCMenu *menu=CCMenu::create(itemReturn,NULL);
addChild(menu,2);
return true;
}
//void HLose::returnToMainMenu()
void HLose::returnToMainMenu(CCObject* sender)
{
CCDirector::sharedDirector()->replaceScene(CCTransitionPageTurn::create(1.5, HMenu::scene(), true));
}