cocos2d-x学习(7)----塔防游戏(一)

        在网上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));
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hfreeman2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值