MOAI を使い始めたばかりで、MOAICoroutine を使用して従来のゲーム ループを作成しようとしています。問題は、30log を使用して構築された「クラス」の一部である関数を渡すと、エラーが返されることです。引き続き機能しているようですが、エラーを修正したいと思います。私の推測では、MOAICoroutine は、コロンを使用した構文上のシュガー メソッドではなく、ドット表記を使用して関数を呼び出していると思われます。コードは次のとおりです。
class = require "30log.30log"
GameSystem = class ()
function GameSystem:__init(Name, Title)
self.Name = Name
self.Title = Title
self.Ready = false
end
function GameSystem:Run()
if self:Init() then
self.Thread = MOAICoroutine.new ()
self.Thread:run(self.Start)
--self:Start()
return true
else
print("Init failed.")
return false
end
end
function GameSystem:Init()
print("Initializing Game System")
if not self:InitTimer() then return false end
if not self:InitWindow(640,480) then return false end
if not self:InitViewport() then return false end
if not self:InitGraphics() then return false end
if not self:InitSound() then return false end
if not self:InitInput() then return false end
self.Ready = true
return true
end
function GameSystem:Start()
print("Starting Game System")
while self.Ready do
self:UpdateTimer()
self:UpdateGraphics()
self:UpdateSound()
self:UpdateInput()
coroutine.yield()
end
end
function GameSystem:InitTimer()
return true
end
function GameSystem:InitWindow(width, height)
print("Initializing Window")
return true
end
function GameSystem:InitViewport()
print("Initializing Viewport")
return true
end
function GameSystem:InitGraphics()
print("Initializing Graphics")
return true
end
function GameSystem:InitSound()
print("Initializing Sound")
return true
end
function GameSystem:InitInput()
print("Initializing Input")
return true
end
function GameSystem:UpdateTimer()
--print("Updating Timer")
return true
end
function GameSystem:UpdateGraphics()
--print("Updating Graphics")
return true
end
function GameSystem:UpdateSound()
--print("Updating Sound")
return true
end
function GameSystem:UpdateInput()
--print("Updating Input")
return true
end
30log クラス コードがこの問題の原因ですか? 私はいろいろなことを試しました。アクセスしようとしている自己が最初の引数、つまり mytable.myfunction(self, myarg) であると確信しています。この nil 値参照を修正するためのアイデア。実際にエラーが発生したのは、Start 関数内の 2 行目です (self.Ready do の間)。