LUAとLove2Dで自分の足を濡らそうとしていて、Luaでオブジェクトのインスタンス化/アクセスに関する問題が発生しています。バグとオブジェクト内の2D(Lua)の予期しないnilを好きになる
ソースはここで見つけることができます:https://bitbucket.org/dannsee/love_scrollingshooter
私は私のメインである、私は、オブジェクトを作成し、敵
enemies = Enemies:new()
と敵の内部オブジェクト、私は保持するオブジェクトを作成します私はタイマーに電話しています。
timers = Timers:new()
だから、敵のコンストラクタ 'メソッドのルックス(基本的に)この
Enemies = {} -- so that Enemies will not be nil when new() is called
timers = {} -- so that timers will be accessible in the class scope
function Enemies:new(enemies)
enemies = enemies or {}
timers = Timers:new()
setmetatable(enemies, self)
self.__index = self
return enemies
end
のように作成されたタイマーは、このような
Timers = {} -- so that Timers will not be nil when new() is called
function Timers:new(timers)
timers = timers or {
miniBombTimerMax = 0.2,
miniBombTimer = minibombTimerMax
}
setmetatable(timers, self)
self.__index = self
return timers
end
として見ている間、しかし、私は1つをrefrenceしようとすると、タイマーの中から(敵のオブジェクトの内部から)、私はゼロ値の例外を得ています。
timers.miniBombTimer -- Produces nil exception
このクラス内で作成されたオブジェクトであり、それは値、及び2が割り当てられる前に、= {}タイマとして局所的にインスタンス化されるので、これは、両方の1が、範囲にあるべきであるように思わ。それは 'コンストラクタ'に値が与えられているためではありません。しかし、ここでは私が握っていないことが増えているようです。
私はこの時点で明らかになっているかもしれないが、これは有効であるべきであると思われる変数の範囲について読んだことがあるからです。なぜタイマーが値で作られていないのか分かりません。
はhttp://lua-users.org/wiki/ObjectOrientationTutorialて読みますか?あなたは問題のコードの部分を表示していませんが、おそらくあなたは 'self'を使用していませんか? – smarx
コンストラクタも 'self'を使用していません。私は 'タイマー 'を'敵'クラスのメンバーにしたいと思っていますが、そうでないかもしれませんか?おそらく、あなたはこのクラスをどのように使うつもりであるかの最小限の例を共有することができます。 – smarx