Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Cocos2d-x и Lua  Что это и с чем их едят
Cocos2d• Игровой движок
Cocos2d• Игровой движок• Objective-C
Cocos2d• Игровой движок• Objective-C• Только iOS
Cocos2d• Только iOS?!
Cocos2d-x• iOS, Android
Cocos2d-x• iOS, Android• C++
Cocos2d-x• iOS, Android• C++• Lua
Lua• Скриптовый
Lua• Скриптовый• Кросс-платформенный
Lua• Скриптовый• Кросс-платформенный• C API
Lua• Скриптовый• Кросс-платформенный• C API• GC!
Сравнение                        С++CCSprite *button =                  CCSprite::                  spriteWithFile(‘superB...
Сравнение                        С++CCSprite *button =                  CCSprite::                  spriteWithFile(‘superB...
Применение Lua•   Изменение логики игры•   Квесты•   Туториал•   Уровни, аддоны и т.д.
Использование Lua                C++              Loader  Script #1   Script #2   Script #3
Использование Lua                AppDelegate.cppstring path =           CCFileUtils::           fullPathFromRelativePath("...
Использование Lua               GameScene.cpp((MyLuaEngine *) CCScriptEngineManager::        sharedManager()->getScriptEng...
Использование Lua               GameScene.cpp((MyLuaEngine *) CCScriptEngineManager::        sharedManager()->getScriptEng...
Использование Lua                    loader.luarequire "tutorial_first"require "tutorial_second"function runLoader(origin)A...
Использование Lua                  tutorial_first.luamodule ("tutorial_first", package.seeall)local originNode, completedfun...
Доступ к Node                 Game Scene          UI Layer      Game LayerMoney        XP                         Building...
Доступ к Node                 Game Scene          UI Layer      Game LayerMoney        XP                         Building...
Доступ к Node                 Game Scene          OriginNode          UI Layer      Game LayerMoney        XP             ...
Доступ к Node...ui = originNode:getChildByTag(TAG_MAIN_NODE)someButton = ui:getChildByTag(TAG_BUTTON)someButton = tolua.ca...
Bindings и сборка•   ./tolua++.exe -o LuaGame.cpp Game.pkg
Bindings и сборка•   ./tolua++.exe -o LuaGame.cpp Game.pkg•   ant
bool isVisiblePositionOnScreen();/* method: isVisiblePositionOnScreen of class BuildingNode */static int tolua_TinyBeach_B...
Something.pkg•   Удалить все CC_DLL в определениях    классов•   Удалить все inline, public, protect и private•   Оставить...
Заключение•   Низкий порог вхождения•   Изменение логики на лету•   Не нужна пересборка•   ?????•   PROFIT!
Вопросы?http://www.lua.org/pil/index.html                     @desoulterhttp://steps3d.narod.ru/tutorials/lua-tutorial.htm...
Upcoming SlideShare
Loading in …5
×

Cocos2d-x и Lua

6,133 views

Published on

Published in: Technology
  • Be the first to comment

Cocos2d-x и Lua

  1. 1. Cocos2d-x и Lua Что это и с чем их едят
  2. 2. Cocos2d• Игровой движок
  3. 3. Cocos2d• Игровой движок• Objective-C
  4. 4. Cocos2d• Игровой движок• Objective-C• Только iOS
  5. 5. Cocos2d• Только iOS?!
  6. 6. Cocos2d-x• iOS, Android
  7. 7. Cocos2d-x• iOS, Android• C++
  8. 8. Cocos2d-x• iOS, Android• C++• Lua
  9. 9. Lua• Скриптовый
  10. 10. Lua• Скриптовый• Кросс-платформенный
  11. 11. Lua• Скриптовый• Кросс-платформенный• C API
  12. 12. Lua• Скриптовый• Кросс-платформенный• C API• GC!
  13. 13. Сравнение С++CCSprite *button = CCSprite:: spriteWithFile(‘superButton.png’);button->setPosition(ccp(250, 170));uiLayer->addChild(button);
  14. 14. Сравнение С++CCSprite *button = CCSprite:: spriteWithFile(‘superButton.png’);button->setPosition(ccp(250, 170));uiLayer->addChild(button); Lualocal button = CCSprite: spriteWithFile(‘superButton.png’)button:setPosition(250, 170)uiLayer:addChild(button)
  15. 15. Применение Lua• Изменение логики игры• Квесты• Туториал• Уровни, аддоны и т.д.
  16. 16. Использование Lua C++ Loader Script #1 Script #2 Script #3
  17. 17. Использование Lua AppDelegate.cppstring path = CCFileUtils:: fullPathFromRelativePath("loader.lua");scriptEngine->addSearchPath(path);scriptEngine->executeScriptFile(path);
  18. 18. Использование Lua GameScene.cpp((MyLuaEngine *) CCScriptEngineManager:: sharedManager()->getScriptEngine())-> executeLoader("runLoader", this);
  19. 19. Использование Lua GameScene.cpp((MyLuaEngine *) CCScriptEngineManager:: sharedManager()->getScriptEngine())-> executeLoader("runLoader", this); Та-дам!
  20. 20. Использование Lua loader.luarequire "tutorial_first"require "tutorial_second"function runLoader(origin)A tutorial_first.runScript(origin)A tutorial_second.runScript(origin)end
  21. 21. Использование Lua tutorial_first.luamodule ("tutorial_first", package.seeall)local originNode, completedfunction runScript(origin)A if completed thenA A returnA endA originNode = originA ...........end
  22. 22. Доступ к Node Game Scene UI Layer Game LayerMoney XP Buildings PeoplesCounter Counter
  23. 23. Доступ к Node Game Scene UI Layer Game LayerMoney XP Buildings PeoplesCounter Counter setTag(TAG_FOR_NODE)
  24. 24. Доступ к Node Game Scene OriginNode UI Layer Game LayerMoney XP Buildings PeoplesCounter Counter setTag(TAG_FOR_NODE)
  25. 25. Доступ к Node...ui = originNode:getChildByTag(TAG_MAIN_NODE)someButton = ui:getChildByTag(TAG_BUTTON)someButton = tolua.cast(someButton, ‘UIButton’)someButton:setIsVisible(false)...
  26. 26. Bindings и сборка• ./tolua++.exe -o LuaGame.cpp Game.pkg
  27. 27. Bindings и сборка• ./tolua++.exe -o LuaGame.cpp Game.pkg• ant
  28. 28. bool isVisiblePositionOnScreen();/* method: isVisiblePositionOnScreen of class BuildingNode */static int tolua_TinyBeach_BuildingNode_isVisiblePositionOnScreen00(lua_State*tolua_S){#ifndef TOLUA_RELEASE tolua_Error tolua_err; if ( !tolua_isusertype(tolua_S,1,"BuildingNode",0,&tolua_err) || !tolua_isnoobj(tolua_S,2,&tolua_err) ) goto tolua_lerror; else#endif { BuildingNode* self = (BuildingNode*) tolua_tousertype(tolua_S,1,0);#ifndef TOLUA_RELEASE if (!self) tolua_error(tolua_S,"invalid self in functionisVisiblePositionOnScreen", NULL);#endif { bool tolua_ret = (bool) self->isVisiblePositionOnScreen(); tolua_pushboolean(tolua_S,(bool)tolua_ret); } } return 1;#ifndef TOLUA_RELEASE tolua_lerror: tolua_error(tolua_S,"#ferror in functionisVisiblePositionOnScreen.",&tolua_err); return 0;#endif}
  29. 29. Something.pkg• Удалить все CC_DLL в определениях классов• Удалить все inline, public, protect и private• Оставить только то, что было внутри public• Можно оставить enum’ы и static
  30. 30. Заключение• Низкий порог вхождения• Изменение логики на лету• Не нужна пересборка• ?????• PROFIT!
  31. 31. Вопросы?http://www.lua.org/pil/index.html @desoulterhttp://steps3d.narod.ru/tutorials/lua-tutorial.htmlhttp://codenix.com/~tolua/tolua++.html

×