MOAI动画线程打破主游戏循环线程

时间:2012-09-08 20:23:01

标签: 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

正如您在注释掉的代码中看到的那样,我已经尝试了使用blockOnAction的easedrivers,我目前有一个线程产生并运行animateLogo。两者表现完全相同。我拿出了一些纹理选择代码,这些代码不应该相关,并且使代码更难以阅读。就像我上面说的那样,在主游戏循环中调用了cheeseProp:destroy,看起来我的线程阻塞也阻塞了父线程。

提前感谢您的帮助!

0 个答案:

没有答案