Поток анимации 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 вызывается из основного игрового цикла, похоже, что блокировка моего потока также блокирует родительский поток.

Заранее благодарю за любую помощь!

0 ответов

Другие вопросы по тегам