“Corona Active Battle Scene in Composer” 翻译为“作曲家中的冠状活跃战斗场景”。

我目前正在开发一款卡牌战斗游戏。在主战斗场景中,我试图展示卡牌之间的激烈战斗,它们的生命值不断减少,并最终在场景中移动武器。

目前,当进入战斗循环时,显示会冻结,但我一直在记录正在发生的事情,战斗仍在进行中,只是在场景后面。我已将战斗循环分成了自己的函数,并通过轻敲事件调用该函数。

我通过while循环内的打印语句验证它是否运行,该语句将当前卡牌的名称和卡牌当前生命值打印到控制台上。当前卡牌的生命值在变化,但它没有改变场景,而是在旧场景上冻结,没有实时显示正在发生的事情。

这是整个场景的代码:

点赞
用户869951
用户869951

问题在于你的战斗场景函数是在循环并修改场景,然而场景引擎仅在事件处理调用 之间 更新场景。也就是说,如果调用了你的tap函数并且你进行了修改,你只有在tap函数返回并且场景引擎处理了新的场景状态后,才会看到修改。

因此,不要像这样做:

function battleScene(args)
  while condition do
     do stuff
  end
end

而应该这样做:

function battleScene(args)
  if condition then
     do stuff
     timer.performWithDelay(2, function() battleScene(args) end)
  end
end

当条件为真时,执行“do stuff”,并为以后调用battleScene 调度一个调用。battleScene将立即返回,使显示引擎有机会更新GUI,然后2毫秒后,将再次调用battleScene,直到最终条件为假且不再调用。请注意,我必须创建一个临时匿名函数,因为battleScene带有参数,而performWithDelay不会将任何参数传递给调度的函数,但可以通过匿名函数隐式地给予上值。需要明确的是,如果battleScene没有带参数,你可以这样做:

function battleScene()
  if condition then
     do stuff
     timer.performWithDelay(2, battleScene)
  end
end
2014-04-16 03:09:04