日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Cocos2d-3.x版的HelloWorld工程分析 (二)

發(fā)布時間:2023/12/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cocos2d-3.x版的HelloWorld工程分析 (二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


我們HelloWorld 從applicationDidFinishLaunching()后,

大部分人都會從這部分代碼開始研究,如果想要研究main函數(shù) 如何調(diào)用applicationDidFinishLaunching()?

傳送門 http://blog.csdn.net/hiwoshixiaoyu/article/details/51472707


#include "AppDelegate.h"#include <vector> #include <string>#include "HelloWorldScene.h" #include "AppMacros.h"//Uncomment the following line to use localize manager //#include "editor-support/cocostudio/LocalizationManager.h"//cocos2d的命名空間 USING_NS_CC; //標(biāo)準(zhǔn)命名空間 using namespace std; //構(gòu)造函數(shù) AppDelegate::AppDelegate() {} //析構(gòu)函數(shù) AppDelegate::~AppDelegate() { }//初始化OpenGl的上下文屬性 void AppDelegate::initGLContextAttrs() {GLContextAttrs glContextAttrs = {8, 8, 8, 8, 24, 8};GLView::setGLContextAttrs(glContextAttrs); }bool AppDelegate::applicationDidFinishLaunching() {// 獲取導(dǎo)演實例auto director = Director::getInstance();//獲取導(dǎo)演的GLView對象(通過一些函數(shù),GLView可以操作的幀信息EGL視圖)//GLView是一個抽象類//cocos2d-x提供GLViewImpl,繼承它為默認(rèn)渲染器上下文,你也可以有自己的GLViewImpl,通過繼承重寫auto glview = director->getOpenGLView();//判空if(!glview) {//創(chuàng)建窗口名glview = GLViewImpl::create("Cpp Empty Test");//設(shè)置opengl的視圖director->setOpenGLView(glview);}director->setOpenGLView(glview);// 設(shè)置決定的分辨率glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER);//獲取EGL視圖大小Size frameSize = glview->getFrameSize();//一個string容器vector<string> searchPath;//在這個例子里,我們選擇資源根據(jù)畫面的高度//如果資源不同于我們的分辨率大小,你需要設(shè)置一個contentScaleFactor//我們使用資源的高度比的高度設(shè)計解決//這樣我們可以確保資源的高度 填充設(shè)計分辨率的高度//如果畫面的高度比設(shè)備的小,選擇大的資源if (frameSize.height > mediumResource.size.height){//高度大于設(shè)備高度//設(shè)置選擇資源路徑searchPath.push_back(largeResource.directory);//設(shè)置比例(高分辨率的設(shè)備可能有一個更高的表面比屏幕尺寸大小)director->setContentScaleFactor(MIN(largeResource.size.height/designResolutionSize.height, largeResource.size.width/designResolutionSize.width));}//如果畫面高度大于設(shè)置資源高度,選擇設(shè)置資源else if (frameSize.height > smallResource.size.height){searchPath.push_back(mediumResource.directory);director->setContentScaleFactor(MIN(mediumResource.size.height/designResolutionSize.height, mediumResource.size.width/designResolutionSize.width));}//如果畫面高度小于設(shè)置資源高度,選擇小的資源else{searchPath.push_back(smallResource.directory);director->setContentScaleFactor(MIN(smallResource.size.height/designResolutionSize.height, smallResource.size.width/designResolutionSize.width));}//設(shè)置搜索目錄FileUtils::getInstance()->setSearchPaths(searchPath);// 如果你想要加載json,用下面的方法/*cocostudio::ILocalizationManager * lm = cocostudio::JsonLocalizationManager::getInstance();lm->initLanguageData("your localize file name.lang.json");cocostudio::LocalizationHelper::setCurrentManager(lm, false);*///如果你想要 載入二進制數(shù)據(jù) .csb 用一下方法/*cocostudio::ILocalizationManager * lm = cocostudio::BinLocalizationManager::getInstance();lm->initLanguageData("your localize file name.lang.csb");cocostudio::LocalizationHelper::setCurrentManager(lm, true);*/// 顯示 FPSdirector->setDisplayStats(true);// 設(shè)置 FPS.默認(rèn)值是 1.0/60 director->setAnimationInterval(1.0 / 60);// 創(chuàng)建一個自動釋放的場景對象,通過一個靜態(tài)方法auto scene = HelloWorld::scene();// 運行場景director->runWithScene(scene);return true; }//這個函數(shù)將被調(diào)用,當(dāng)app是不活躍的。例如打來電話了,它就會被喚起 void AppDelegate::applicationDidEnterBackground() {Director::getInstance()->stopAnimation();// 如果使用 SimpleAudioEngine,必須在這pause// SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); }//當(dāng)app再次活躍起來的時候,這個函數(shù)會被調(diào)用 void AppDelegate::applicationWillEnterForeground() {Director::getInstance()->startAnimation();// 如果使用SimpleAudioEngine, 你必須在這 resume // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); }



AppDelegate.cpp中的代碼主要實現(xiàn)了游戲啟動后執(zhí)行的操作,游戲啟動后的操作:

1、初始化導(dǎo)演類

2、創(chuàng)建的窗口

3、設(shè)置openGL 視圖

4、設(shè)置動畫的幀數(shù)顯示和幀率

5、調(diào)用場景

6、運行場景(游戲真正的開始)


#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__#include "cocos2d.h"class HelloWorld : public cocos2d::Layer { public://初始化層 virtual bool init() override;//創(chuàng)建場景 static cocos2d::Scene* scene();// 響應(yīng)消息 void menuCloseCallback(Ref* sender);// //用于創(chuàng)建:場景、菜單、層等東西 ,宏函數(shù)CREATE_FUNC(HelloWorld); };#endif // __HELLOWORLD_SCENE_H__
#include "HelloWorldScene.h" #include "AppMacros.h"USING_NS_CC;Scene* HelloWorld::scene() {//'scene'是一個自動釋放的對象auto scene = Scene::create();// 'layer'是一個自動釋放的對象HelloWorld *layer = HelloWorld::create();// 把 layer作為一個兒子加到 scene上scene->addChild(layer);// 返回 scenereturn scene; }// 在 "init" 你需要初始化你想要的實例 bool HelloWorld::init() {//// 1. 父類 首先初始化if ( !Layer::init() ){return false;}/************************************************************************//* FrameSize就是屏幕的實際分辨率,這是不變的,比如我用的蓋世三的手機分辨率為1280x720,這就是蓋世三的FrameSize。注意這個FrameSize很容易理解成屏幕的長寬多少,其實不是,分辨率和實際的長寬沒有必然聯(lián)系。比如:蓋世3的尺寸(長寬)為4.8寸,分辨率為1280x720蓋世4的尺寸(長寬)為4.99寸,分辨率為1920x1080所以在設(shè)計游戲時,只考慮屏幕的分辨率即可,不用考慮屏幕的實際長寬。 *//************************************************************************//*WinSize就是設(shè)計分辨率,相當(dāng)于游戲設(shè)計的邏輯大小,可以這樣理解,上面的FrameSize就是畫框,這里的WinSize就是畫布。VisibleSize就是畫布顯示在畫框中的部分,注意:它的大小是用WinSize來表示的。VisibleOrigin就是VisibleSize在畫框中的左下角坐標(biāo)點,注意也是用WinSize來表示的。 */auto visibleSize = Director::getInstance()->getVisibleSize();auto origin = Director::getInstance()->getVisibleOrigin();// 添加一個關(guān)閉按鈕icon,設(shè)置回調(diào)函數(shù),這是一個自動釋放的對象auto closeItem = MenuItemImage::create("CloseNormal.png","CloseSelected.png",CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));closeItem->setPosition(origin + Vec2(visibleSize) - Vec2(closeItem->getContentSize() / 2));//常見一個菜單,它是一個自動釋放的對象auto menu = Menu::create(closeItem, nullptr);menu->setPosition(Vec2::ZERO);this->addChild(menu, 1);//常見一個label標(biāo)簽,字體是arial.ttfauto label = Label::createWithTTF("Hello World", "fonts/arial.ttf", TITLE_FONT_SIZE);// label的位置設(shè)置到屏幕中心label->setPosition(origin.x + visibleSize.width/2,origin.y + visibleSize.height - label->getContentSize().height);//添加標(biāo)簽到這個層上this->addChild(label, 1);// 添加HelloWorld圖片auto sprite = Sprite::create("HelloWorld.png");//精靈的位置在屏幕中心sprite->setPosition(Vec2(visibleSize / 2) + origin);// 把精靈作為兒子加到層上this->addChild(sprite);return true; }//回調(diào)函數(shù) void HelloWorld::menuCloseCallback(Ref* sender) {//Director結(jié)束執(zhí)行,釋放資源Director::getInstance()->end();#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)//IOS的退出exit(0); #endif }

HelloWorldScene.cpp中的代碼中的Scene* HelloWorld::scene(),實現(xiàn)了創(chuàng)建場景的過程:

1、創(chuàng)建場景

2、創(chuàng)建層?

3、將層加到場景上

4、返回場景

HelloWorldScene.cpp中的代碼中的Scene* HelloWorld::init(),實現(xiàn)了初始化實例:

1、初始化父類的Layer

2、得到窗口的大小(WinSiez)

3、得到窗口的坐標(biāo)(左下角點)

4、創(chuàng)建關(guān)閉按鈕(Normal、Push)和回調(diào)函數(shù)

5、設(shè)置關(guān)閉按鈕的位置

6、創(chuàng)建菜單項

7、設(shè)置菜單項的位置

8、設(shè)置菜單的位置

9、將菜單加到層中

10、創(chuàng)建標(biāo)簽

11、設(shè)置標(biāo)簽的位置

12、將標(biāo)簽加到層上

13、創(chuàng)建精靈

14、設(shè)置精靈的位置

15、將精靈加到層上




轉(zhuǎn)載于:https://www.cnblogs.com/hiwoshixiaoyu/p/10035086.html

總結(jié)

以上是生活随笔為你收集整理的Cocos2d-3.x版的HelloWorld工程分析 (二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。