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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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


我們HelloWorld 從applicationDidFinishLaunching()后,

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



AppDelegate.cpp中的代碼主要實現了游戲啟動后執行的操作,游戲啟動后的操作:

1、初始化導演類

2、創建的窗口

3、設置openGL 視圖

4、設置動畫的幀數顯示和幀率

5、調用場景

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


#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__#include "cocos2d.h"class HelloWorld : public cocos2d::Layer { public://初始化層 virtual bool init() override;//創建場景 static cocos2d::Scene* scene();// 響應消息 void menuCloseCallback(Ref* sender);// //用于創建:場景、菜單、層等東西 ,宏函數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很容易理解成屏幕的長寬多少,其實不是,分辨率和實際的長寬沒有必然聯系。比如:蓋世3的尺寸(長寬)為4.8寸,分辨率為1280x720蓋世4的尺寸(長寬)為4.99寸,分辨率為1920x1080所以在設計游戲時,只考慮屏幕的分辨率即可,不用考慮屏幕的實際長寬。 *//************************************************************************//*WinSize就是設計分辨率,相當于游戲設計的邏輯大小,可以這樣理解,上面的FrameSize就是畫框,這里的WinSize就是畫布。VisibleSize就是畫布顯示在畫框中的部分,注意:它的大小是用WinSize來表示的。VisibleOrigin就是VisibleSize在畫框中的左下角坐標點,注意也是用WinSize來表示的。 */auto visibleSize = Director::getInstance()->getVisibleSize();auto origin = Director::getInstance()->getVisibleOrigin();// 添加一個關閉按鈕icon,設置回調函數,這是一個自動釋放的對象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標簽,字體是arial.ttfauto label = Label::createWithTTF("Hello World", "fonts/arial.ttf", TITLE_FONT_SIZE);// label的位置設置到屏幕中心label->setPosition(origin.x + visibleSize.width/2,origin.y + visibleSize.height - label->getContentSize().height);//添加標簽到這個層上this->addChild(label, 1);// 添加HelloWorld圖片auto sprite = Sprite::create("HelloWorld.png");//精靈的位置在屏幕中心sprite->setPosition(Vec2(visibleSize / 2) + origin);// 把精靈作為兒子加到層上this->addChild(sprite);return true; }//回調函數 void HelloWorld::menuCloseCallback(Ref* sender) {//Director結束執行,釋放資源Director::getInstance()->end();#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)//IOS的退出exit(0); #endif }

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

1、創建場景

2、創建層?

3、將層加到場景上

4、返回場景

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

1、初始化父類的Layer

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

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

4、創建關閉按鈕(Normal、Push)和回調函數

5、設置關閉按鈕的位置

6、創建菜單項

7、設置菜單項的位置

8、設置菜單的位置

9、將菜單加到層中

10、創建標簽

11、設置標簽的位置

12、將標簽加到層上

13、創建精靈

14、設置精靈的位置

15、將精靈加到層上




轉載于:https://www.cnblogs.com/hiwoshixiaoyu/p/10035086.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。