Upgrade to Pro — share decks privately, control downloads, hide ads and more …

cocos2d-x 3.2 Lua Bindings入門

Yusuke Sakurai
July 29, 2014
3.6k

cocos2d-x 3.2 Lua Bindings入門

2014/7/30 第6回cocos2d-x勉強会の発表資料です

Yusuke Sakurai

July 29, 2014
Tweet

Transcript

  1. ...

  2. LUA

  3. LUA -- グローバル変数の宣言 a = "global" -- ローカル変数の宣言 local b

    = "local" -- 変数の多重代入 local num, str, array, dict = 1, "str", {1,2,3}, {name = "keroxp", age = 22} -- 配列へのアクセス array[1] -- -> 1 -- テーブルへのアクセス dict.name -- -> "keroxp" dict["age"] -- -> 22
  4. LUA -- これは... local function func(a) return a + 1

    end -- こう解釈される local func = function(a) return a + 1 end
  5. C++ using namespace cocos2d; auto visibleSize = Director::getInstance():getVisibleSize() // スプライトを作成して追加

    auto sprite = Sprite::create("image.png"); sprite->setPosition(Point(visibleSize*0.5)); this->addChild(sprite, 1) // メニューを作成 auto menuItem = MenuItemFont::create("Button", [](Ref *sender)->void{ // handle event }); auto menu = cocos2d::Menu::create(menuItem, NULL); this->addChild(menu, 99)
  6. LUA local layer = cc.Layer:create() local visibleSize = cc.Director:getInstance():getVisibleSize() --

    スプライトを作成して追加 local sprite = cc.Sprite:create("image.png") sprite:setPosition(visibleSize.width*0.5, visibleSize.height*0.5) layer:addChild(sprite, 1) -- メニューを作成 local menuItem = cc.MenuItemFont:create("Button") menuItem:registerScriptTapHandler(function(sender) -- handle event end) layer:addChild(menu, 99)
  7. ...

  8. -- Nodeを継承したクラスを定義 local MyNode = class("MyNode", function() return cc.Node.create() end

    -- コンストラクタ function MyNode:ctor(name) -- 初期化処理 self.name = name end function MyNode:sayName() print("I'm "..self.name) end -- インスタンス化 local instance = MyNode.new("keroxp") -- プロパティ instance.name -- -> "keroxp" -- 独自メソッド instance:sayName() -- -> "I'm keroxp" -- Nodeから拡張されたメソッド instance:setTag(11) instance:getTag() -- -> 11
  9. ONENTER, ONEXIT onEnter, onExit Node#registerScriptHandler -- レイヤーを作成 local layer =

    cc.Layer:create() -- "enter", "exit"などのイベントのハンドラ local function onNodeEvent(ev) if ev == "enter" then -- onEnter elseif ev == "exit" then -- onExit end end -- ノードにイベントハンドラを登録 layer:registerScriptHandler(onNodeEvent)
  10. UPDATE update Scheduler#scheduleScriptFunc -- 毎フレームごとに呼ばれる local function tick(delta) -- 毎フレームごとの処理

    end -- スケジューラに登録 local scheduler = cc.Director:getInstance():getScheduler() local schedulerID = scheduler:scheduleScriptFunc(tick, 0, false)
  11. -- nodeはNode型だと推論される local node = cc.Node:create() node:setTag(1) -- これはコード補完が効く --

    別の変数に代入しても型推論される local other = node other:setTag(2) -- これもコード補完が効く -- 宣言時に型が違う変数はそれ以降に代入があっても型推論されない local other2 = nil other2 = other other2:setTag(3) -- これはコード補完が効かない
  12. local point = cc.p(100,100) -- Point local size = cc.size(320,

    480) -- Size local rect = cc.rect(0,0,200,200) -- Rect local red = cc.c4f(1,0,0,1) -- Color4F -- 演算子のオーバーロードもないので関数を使う local v = cc.pSub(cc.p(200,200), point) local nv = cc.pNormalize(v)
  13. INDEX 1 Lua 0 1 0 value -- 配列の宣言 local

    arr = {"a","b","c"} arr[0] -- -> nil arr[1] -- -> "a" #arr -- -> 3 -- 手動での配置 for i=0, 3 do arr[i] = i end arr[0] -- -> 0 arr[1] -- -> 1 #arr -- -> 4
  14. cocos2d-x Objctive-C MRC(Manual Reference Couting) release, retain, autorelease 0 or

    autorelease pool Node#addChild/removeChild +1/-1 ... Lua C++
  15. LUA

  16. Q&A