Поток анимации MOAI разрывает основной цикл игры
Я новичок в MOAI, в основном использую его, потому что моя программа выпускников заставляет меня тоже. Они поклонники крутых кривых обучения в короткие сроки, по-видимому.:)
В любом случае, у меня есть проблема, когда мой основной игровой цикл в своем собственном потоке вызывает функцию, запускающую 2-секундную анимацию, которую я также помещаю в отдельный поток. Для того, чтобы анимация завершилась до того, как я уберу опору, я попробовал спинлок и попытался использовать easedrivers. Обе заставляют анимацию работать нормально, но в течение этих двух секунд мой основной поток, кажется, не выполняется вообще.
В игре используется Box2D, поэтому она не падает в течение этих двух секунд, но вся логика игрового цикла не работает во время этой анимации. Я думал, что весь смысл в том, чтобы поместить его в свой собственный поток, чтобы он мог работать вместе с игровым циклом. У кого-нибудь есть предложения?
--inside of a another function where cheeseProp is created.
function cheeseProp:destroy ()
animateLogoThread = MOAIThread:new ()
--animateLogoThread = MOAICoroutine.new()
layer:removeProp ( self )
score = score + 10
animateLogoThread:run ( animateLogo(self.type) )
--animateLogo(self.type)
timerFrames = 0
cheeseCounter = cheeseCounter - 1
cheeseArray[self] = nil
self = nil
end
function animateLogo(logoNum)
local logoGfx = MOAIGfxQuad2D.new ()
logoGfx:setRect ( -100, -100, 100, 100 )
logoGfx:setTexture ( "assets/logo1.png" )
local x1, y1 = beeBody:getPosition()
local logoProp = MOAIProp2D.new()
logoProp:setDeck(logoGfx)
logoProp:setLoc ( x1, y1 )
layer:insertProp(logoProp)
logoProp:moveScl( -1, -1, 2.0)
action = logoProp:seekLoc ( x1 + 400, y1 + 400, 2.0 )
while action:isBusy () do coroutine:yield () end
-- local ease = MOAIEaseDriver.new ()
-- ease:reserveLinks ( 4 )
-- ease:setLink ( 1, logoProp, MOAIProp2D.ATTR_X_LOC, 400 )
-- ease:setLink ( 2, logoProp, MOAIProp2D.ATTR_Y_LOC, 400 )
-- ease:setLink ( 3, logoProp, MOAIProp2D.ATTR_X_SCL, -1 )
-- ease:setLink ( 4, logoProp, MOAIProp2D.ATTR_Y_SCL, -1 )
-- ease:setSpan ( 2.0 )
-- ease:start ()
-- MOAIThread.blockOnAction(ease)
layer:removeProp(logoProp)
end
Как вы можете видеть из закомментированного кода, я попробовал easedrivers с blockOnAction, и в настоящее время у меня есть поток, порождающий и запускающий animateLogo. Оба ведут себя одинаково. Я вынул немного кода для выбора текстуры, который не должен быть релевантным и затрудняет чтение кода. Как я уже говорил выше, cheeseProp: destroy вызывается из основного игрового цикла, похоже, что блокировка моего потока также блокирует родительский поток.
Заранее благодарю за любую помощь!