大佬教程收集整理的这篇文章主要介绍了【Cocos2d-x Lua笔记二】CocosLuaGame开篇,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include "AppDelegate.h" #include "CCLuaENGIne.h" #include "SimpleAudioENGIne.h" #include "cocos2d.h" #include "Runtime.h" #include "ConfigParser.h" #include "lua_module_register.h" using namespace CocosDenshion; USING_NS_Cc; using namespace std; AppDelegate::AppDelegate() { } AppDelegate::~AppDelegate() { SimpleAudioENGIne::end(); } //if you want a different context,just modify the value of glContextAttrs //it will takes effect on all platforms void AppDelegate::initGLContextAttrs() { //set OpenGL context attributions,now can only set six attributions: //red,green,blue,alpha,depth,stencil GLContextAttrs glContextAttrs = {8,8,24,8}; GLView::setGLContextAttrs(glContextAttrs); } bool AppDelegate::applicationDidFinishLaunching() { #if (COCOS2D_DEBUG > 0) // NOTE:Please don't remove this call if you want to debug with Cocos Code IDE initRuntime(); #endif // initialize director auto director = Director::geTinstance(); auto glview = director->getOpenGLView(); if(!glview) { Size viewSize = ConfigParser::geTinstance()->geTinitViewSize(); String title = ConfigParser::geTinstance()->geTinitViewName(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32 || CC_TARGET_PLATFORM == CC_PLATFORM_MAC) extern void createSimulator(const char* viewName,float width,float height,bool isLandscape = true,float frameZoomFactor = 1.0f); bool isLanscape = ConfigParser::geTinstance()->isLanscape(); createSimulator(title.c_str(),viewSize.width,viewSize.height,isLanscapE); #else glview = cocos2d::GLViewImpl::createWithRect(title.c_str(),Rect(0,viewSize.height)); director->setOpenGLView(glview); #endif } auto ENGIne = LuaENGIne::geTinstance(); ScriptENGIneManager::geTinstance()->setScriptENGIne(ENGInE); lua_State* L = ENGIne->getLuaStack()->getLuaState(); lua_module_register(L); // If you want to use Quick-Cocos2d-X,please uncomment below code // register_all_quick_manual(L); LuaStack* stack = ENGIne->getLuaStack(); stack->setXXTEAKeyAndSign("2dxLua",strlen("2dxLua"),"XXTEA",strlen("XXTEA")); //register custom function //LuaStack* stack = ENGIne->getLuaStack(); //register_custom_function(stack->getLuaState()); #if (COCOS2D_DEBUG > 0) // NOTE:Please don't remove this call if you want to debug with Cocos Code IDE startRuntime(); #else ENGIne->executeScriptFile(ConfigParser::geTinstance()->getEntryFile().c_str()); #endif return true; } // This function will be called when the app is inactive. When comes a phone call,it's be invoked too void AppDelegate::applicationDidEnterBACkground() { Director::geTinstance()->stopAnimation(); SimpleAudioENGIne::geTinstance()->pauseBACkgroundMusic(); } // this function will be called when the app is active again void AppDelegate::applicationWillEnterForeground() { Director::geTinstance()->startAnimation(); SimpleAudioENGIne::geTinstance()->resumeBACkgroundMusic(); }@H_674_0@
#include "json/document.h" #include "json/filestream.h" #include "json/Stringbuffer.h" #include "json/writer.h" #include "ConfigParser.h" #define CONFIG_FILE "config.json" #define CONSOLE_PORT 6010 #define UPLOAD_PORT 6020 #define WIN_WIDTH 960 #define WIN_HEIGHT 640 // ConfigParser ConfigParser *ConfigParser::s_sharedInstance = NULL; ConfigParser *ConfigParser::geTinstance(void) { if (!s_sharedInstancE) { s_sharedInstance = new ConfigParser(); s_sharedInstance->ReadConfig(); } return s_sharedInstance; } void ConfigParser::ReadConfig() { String fullPathFile = FileUtils::geTinstance()->fullPathForFilename(CONFIG_FILE); String fileContent = FileUtils::geTinstance()->getStringFromFile(fullPathFilE); if(fileContent.empty()) return; if (_docRootjson.Parse<0>(fileContent.c_str()).HasParseError()) { cocos2d::log("read json file %s failed because of %s",fullPathFile.c_str(),_docRootjson.GetParseError()); return; } if (_docRootjson.HasMember("init_cfg")) { if(_docRootjson["init_cfg"].IsObject()) { const rapidjson::Value& objecTinitView = _docRootjson["init_cfg"]; if (objecTinitView.HasMember("width") && objecTinitView.HasMember("height")) { _initViewSize.width = objecTinitView["width"].GetUint(); _initViewSize.height = objecTinitView["height"].GetUint(); if (_initViewSize.height>_initViewSize.width) { float tmpvalue = _initViewSize.height; _initViewSize.height = _initViewSize.width; _initViewSize.width = tmpvalue; } } if (objecTinitView.HasMember("name") && objecTinitView["name"].IsString()) { _viewName = objecTinitView["name"].GetString(); } if (objecTinitView.HasMember("isLandscape") && objecTinitView["isLandscape"].IsBool()) { _isLandscape = objecTinitView["isLandscape"].GetBool(); } if (objecTinitView.HasMember("entry") && objecTinitView["entry"].IsString()) { _entryfile = objecTinitView["entry"].GetString(); } if (objecTinitView.HasMember("consolePort")) { _consolePort = objecTinitView["consolePort"].GetUint(); if(_consolePort <= 0) _consolePort = CONSOLE_PORT; } if (objecTinitView.HasMember("uploadPort")) { _uploadPort = objecTinitView["uploadPort"].GetUint(); if(_uploadPort <= 0) _uploadPort = UPLOAD_PORT; } if (objecTinitView.HasMember("isWindowTop") && objecTinitView["isWindowTop"].IsBool()) { _isWindowTop= objecTinitView["isWindowTop"].GetBool(); } } } if (_docRootjson.HasMember("simulator_screen_size")) { const rapidjson::Value& ArrayScreenSize = _docRootjson["simulator_screen_size"]; if (ArrayScreenSize.IsArray()) { for (int i = 0; i<ArrayScreenSize.Size(); i++) { const rapidjson::Value& objectScreenSize = ArrayScreenSize[i]; if (objectScreenSize.HasMember("title") && objectScreenSize.HasMember("width") && objectScreenSize.HasMember("height")) { _screenSizeArray.push_BACk(SimulatorScreenSize(objectScreenSize["title"].GetString(),objectScreenSize["width"].GetUint(),objectScreenSize["height"].GetUint())); } } } } } ConfigParser::ConfigParser(void) : _isLandscape(true),_isWindowTop(false),_consolePort(CONSOLE_PORT),_uploadPort(UPLOAD_PORT),_viewName("CocosLuaGames"),_entryfile("src/main.lua"),_initViewSize(WIN_WIDTH,WIN_HEIGHT) { } rapidjson::Document& ConfigParser::getConfigJsonRoot() { return _docRootjson; } String ConfigParser::geTinitViewName() { return _viewName; } String ConfigParser::getEntryFile() { return _entryfile; } Size ConfigParser::geTinitViewSize() { return _initViewSize; } bool ConfigParser::isLanscape() { return _isLandscape; } bool ConfigParser::isWindowTop() { return _isWindowTop; } int ConfigParser::getConsolePort() { return _consolePort; } int ConfigParser::getUploadPort() { return _uploadPort; } int ConfigParser::getScreenSizeCount(void) { return (int)_screenSizeArray.size(); } const SimulatorScreenSize ConfigParser::getScreenSize(int indeX) { return _screenSizeArray.at(indeX); }@H_674_0@
ConfigParser::ConfigParser(void) : _isLandscape(true),WIN_HEIGHT) { }@H_674_0@
--设置文件加载路径
cc.FileUtils:geTinstance():addSearchPath("src") cc.FileUtils:geTinstance():addSearchPath("res") -- CC_USE_DEPRECATED_API = true
--require相当于C里的include
require "cocos.init" -- cclog
--定义了cclog函数,其中(...)的意思是。这个函数为变长函数,即可接受不同数量的实参。比如Cclog("pi=%.3f",math.pi) -->pi=3.141
local cclog = function(...) print(String.format(...)) end -- for CCLuaENGIne traceBACk
--错误消息与追溯
function __G__TRACKBACK__(msg) cclog("----------------------------------------") cclog("LUA ERROR: " .. toString(msg) .. "\n")
--获取当前执行的调用栈
cclog(debug.traceBACk()) cclog("----------------------------------------") return msg end local function main()
--垃圾回收器的API。collectgarbage(“collect”)执行一轮完整的垃圾收集周期,收集并释放所有不可到达的对象。
collectgarbage("collect")
--避免内存泄露
-- avoid memory leak collectgarbage("setpause",100) collectgarbage("setstepmul",5000)
--用过Cocos2d-x C++写的下面肯定很熟悉了
-- initialize director local director = cc.Director:geTinstance() --turn on display FPS director:setDisplayStats(true) --set FPs. the default value is 1.0/60 if you don't call this director:setAnimationInterval(1.0 / 60) cc.Director:geTinstance():getOpenGLView():setDesignResolutionSize(480,320,0) --create scene local scene = require("GameScene") local gameScene = scene.create() gameScene:playBgMusic() if cc.Director:geTinstance():getRunningScene() then cc.Director:geTinstance():replaceScene(gameScenE) else cc.Director:geTinstance():runWithScene(gameScenE) end end --错误处理 local status,msg = xpcall(main,__G__TRACKBACK__) if not status then error(msg) end
以上是大佬教程为你收集整理的【Cocos2d-x Lua笔记二】CocosLuaGame开篇全部内容,希望文章能够帮你解决【Cocos2d-x Lua笔记二】CocosLuaGame开篇所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。