Я только начинаю с 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). Любые идеи, чтобы исправить эту ссылку на нулевое значение. На самом деле ошибка произошла во второй строке внутри функции Start (в то время как self.Ready делает).