PR

クラス

Cocos Code IDEとLua言語を使ったサンプルコードと例文集です。

Luaにはクラスの機能はありませんが、Cocos2d-xで用意されたclass関数を使うことにより、C++でのクラスに似た振る舞いを実装することができます。クラスの継承は、インスタンスを拡張することで行っているようです。

サンプルコード

クラスの作成例です。

MyClass = class("MyClass")

-- コンストラクタ
function MyClass:ctor()
    self.age = 20
    self.name = "abc"
end

-- メソッド
function MyClass:method(param)
    return param * 100
end

-- インスタンスの作成
local myClass = MyClass.new()

-- メソッドの呼び出し
local ret = myClass:method(10)

ノードを継承したクラス(C++オブジェクトからの継承)を定義する

class関数の第2引数にNodeのインスタンを返す関数を追加します。内部ではノードのインスタンスを複製してそれに新しいクラスの変数やメソッドを追加しているようです。 C++のクラスかLuaのクラスかは、インスタンス変数ctype=1がC++、ctype=2がLuaのクラスとして区別しているようです。C++のオブジェクトからの継承とLuaのクラスからの継承は、クラスの定義方法が異なります。

MyNode = class("MyNode", function()
    return cc.Node:create()
end)

Luaのクラスを定義する

class(className)関数を使います。

MyClass = class("MyClass")

Luaのクラスを継承したクラスを作成する

Luaのクラスを継承(拡張)するにはclass関数の第2引数にクラスを渡します。

ChildClass = class("ChildClass", MyClass)

インスタンスを作成する

インスタンスの作成にはnewメソッドを使います。

local myClass = MyClass.new()

初期値を与えてインスタンスを作成する

クラス側でコンストラクタに引数を渡すように設計しておけば初期値を与えてインスタンスを作成できます。

local myClass = MyClass.new(20)

コンストラクタ

コンストラクタのメソッド名はctorです。

-- 引数のない場合
function MyClass:ctor()
    -- ここに初期化処理
end
-- 引数がある場合の例
function MyClass:ctor(age)
    self.age = age -- インスタンス変数に代入
end

メソッド

メソッドの定義方法です。

function MyClass:method()
    -- ここにメソッドの処理を記述
end

クラス変数

クラス変数の例です。

MyClass.address = "xyz"

扱いには注意が必要で、常に「クラス名.変数」の形で使う必要があります。「インスタンス.変数」として代入した時点でインスタンス変数となってしまいます。C++の感覚で使うとミスをしやすいので、使わないほうが無難かもしれません。

クラスメソッド

クラスメソッドの例です。

function MyClass.classMethod()
    -- ここにメソッドの処理を記述
end

クラスのインスタンスからクラス名を取得する

クラスのインスタンスからクラス名を取得するにはインスタンス変数の__cnameから取得できます。

myClass = MyClass.new()
cclog("%s", myClass.__cname)

親クラスのメソッドを呼び出す

親クラスのメソッドを呼び出す例です。コロン(:)ではなくピリオド(.)でメソッドを呼び出しているので注意してください。 第1引数にselfを渡して呼び出します。

function MyClass:method()
    self.super.method(self, param1, param2, ...)
    -- または親クラスがParentClassの場合、ParentClass.method(self, param1, param2, ...)
end
Copyright(C) 2014 - 2015 「Cocos Code IDEとLua言語でゲームを作る」逆引き辞典for Lua All rights Reserved.