cocos2d-x游戏开发 跑酷(一)开始界面

原创,转载请注明出处:http://blog.csdn.net/dawn_moon/article/details/21229369


上次我也重写过他们的雷电,不过由于比较忙,当时也没有专职做游戏就没有写详细的教程。这次我想按照他们的思路重写一下,写个详细的系列教程。然后写个Lua版的,希望对还没有入门的开发者有帮助。


泰然的跑酷代码连cocos2d-x2.1.5的引擎代码都一起打包了,这样方便大家直接调试,不需要自己再另建工程,避免引擎版本不一致对新手造成困扰。我重写完之后,也会原地打包,方便大家调试。


原地打开Parkour工程,可以看到工程结构,游戏逻辑全在Resources分组下面,如下:


入口是MainScene.js文件,这个文件做了三件事,构建开始画面,一张背景,一个按钮,预加载音效文件。

好了,我们开始写C++版的MainScene:

  1. //  
  2. //  MainScene.h  
  3. //  Parkour  
  4. //  
  5. //  Created by lerry on 14-3-13.  
  6. //  Copyright (c) 2014年 Goonear Co.,Ltd. All rights reserved.  
  7. //  
  8.   
  9. #ifndef __Parkour__MainScene__  
  10. #define __Parkour__MainScene__  
  11.   
  12. #include "cocos2d.h"  
  13. #include "resources.h"  
  14.   
  15. class MainScene : public cocos2d::CCLayer  
  16. {  
  17. private:  
  18.     void onPay();  
  19.       
  20.     void preloadMusic();  
  21.       
  22. public:  
  23.     virtual bool init();  
  24.       
  25.     static cocos2d::CCScene* scene();  
  26.       
  27.     CREATE_FUNC(MainScene);  
  28.       
  29.       
  30. };  
  31.   
  32.   
  33. #endif /* defined(__Parkour__MainScene__) */  
实现文件:

  1. //  
  2. //  MainScene.cpp  
  3. //  Parkour  
  4. //  
  5. //  Created by lerry on 14-3-13.  
  6. //  Copyright (c) 2014年 Goonear Co.,Ltd. All rights reserved.  
  7. //  
  8.   
  9. #include "MainScene.h"  
  10. #include "SimpleAudioEngine.h"  
  11.   
  12. USING_NS_CC;  
  13. using namespace CocosDenshion;  
  14.   
  15. CCScene* MainScene::scene()  
  16. {  
  17.     CCScene* scene = CCScene::create();  
  18.     CCLayer* layer = MainScene::create();  
  19.     scene->addChild(layer);  
  20.     return scene;  
  21. }  
  22.   
  23.   
  24.   
  25. bool MainScene::init()  
  26. {  
  27.     if (!CCLayer::init()) {  
  28.         return false;  
  29.     }  
  30.     // 预加载音乐文件  
  31.     preloadMusic();  
  32.       
  33.     CCSize winsize = CCDirector::sharedDirector()->getWinSize();  
  34.     CCPoint center = ccp(winsize.width / 2, winsize.height / 2);  
  35.       
  36.     CCSprite* spriteBg = CCSprite::create("MainBG.png");  
  37.     spriteBg->setPosition(center);  
  38.     this->addChild(spriteBg);  
  39.       
  40.     // 这里的菜单是用图片,setFontSize貌似没用啊  
  41.     CCMenuItemFont::setFontSize(60);  
  42.     // 和js版参数顺序不一样  
  43.     CCMenuItemSprite* menuItem = CCMenuItemSprite::create(CCSprite::create("start_n.png"), CCSprite::create("start_s.png"), this, menu_selector(MainScene::onPay));  
  44.       
  45.     // 必须以NULL结尾  
  46.     CCMenu* menu = CCMenu::create(menuItem, NULL);  
  47.     menu->setPosition(center);  
  48.     this->addChild(menu);  
  49.       
  50.     return true;  
  51. }  
  52.   
  53. void MainScene::preloadMusic()  
  54. {  
  55.     SimpleAudioEngine* audioEngine = SimpleAudioEngine::sharedEngine();  
  56.     audioEngine->preloadBackgroundMusic(backmusic);  
  57.     audioEngine->preloadEffect(jummpmusic);  
  58.     audioEngine->preloadEffect(crouch);  
  59.       
  60. }  
  61.   
  62. // start按钮回调  
  63. void MainScene::onPay()  
  64. {  
  65.     CCLog("onPlay click");  
  66. }  

预加载音效的函数里面的参数我做了处理,我习惯将所有的资源文件写到一个头文件里面resources.h

  1. //  
  2. //  resources.h  
  3. //  Parkour  
  4. //  
  5. //  Created by lerry on 14-3-13.  
  6. //  Copyright (c) 2014年 Goonear Co.,Ltd. All rights reserved.  
  7. //  
  8.   
  9. #ifndef Parkour_resources_h  
  10. #define Parkour_resources_h  
  11.   
  12. static const char backmusic[] = "background.mp3";  
  13.   
  14. static const char jummpmusic[] = "jump.mp3";  
  15.   
  16. static const char crouch[] = "crouch.mp3";  
  17.   
  18. #endif  
这个开始场景写好了以后需要替换JS版的场景,修改AppDelegate.cpp

include 一下MainScene.h

然后修改实现,看代码片段

  1.     // set searching path  
  2.     CCFileUtils::sharedFileUtils()->setSearchPaths(searchPath);  
  3.       
  4.     // turn on display FPS  
  5.     pDirector->setDisplayStats(true);  
  6.       
  7.     // set FPS. the default value is 1.0/60 if you don't call this  
  8.     pDirector->setAnimationInterval(1.0 / 60);  
  9.       
  10. //    ScriptingCore* sc = ScriptingCore::getInstance();  
  11. //    sc->addRegisterCallback(register_all_cocos2dx);  
  12. //    sc->addRegisterCallback(register_all_cocos2dx_extension);  
  13. //    sc->addRegisterCallback(register_all_cocos2dx_extension_manual);  
  14. //    sc->addRegisterCallback(register_cocos2dx_js_extensions);  
  15. //    sc->addRegisterCallback(register_CCBuilderReader);  
  16. //    sc->addRegisterCallback(jsb_register_chipmunk);  
  17. //    sc->addRegisterCallback(jsb_register_system);  
  18. //    sc->addRegisterCallback(JSB_register_opengl);  
  19. //    sc->addRegisterCallback(MinXmlHttpRequest::_js_register);  
  20. //    sc->addRegisterCallback(register_jsb_websocket);  
  21. //  
  22. //    sc->start();  
  23. //      
  24. //    CCScriptEngineProtocol *pEngine = ScriptingCore::getInstance();  
  25. //    CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);  
  26. //    ScriptingCore::getInstance()->runScript("MainScene.js");  
  27.       
  28.     // C++的场景实现  
  29.     CCScene *scene = MainScene::scene();  
  30.     pDirector->runWithScene(scene);  
  31.       
  32.     return true;  



将绑定JS的代码注释掉,加入C++的场景。然后跑起来,看到如下画面,第一步就成功了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值