ゲーム エンティティの 1 つの一時的な状態に関心があるようですね。これはよくあることです。パワーアップが 6 秒間続く、敵が 2 秒間気絶する、ジャンプ中のキャラクターの見た目が異なる、などです。一時的な状態は待機状態とは異なります。待っているということは、あなたの5秒間の不死の間に他に何も起こらないことを示唆しています. ゲームを通常どおり続行したいようですが、不滅の主人公が 5 秒間います。
一時的な状態を表すには、ブール値ではなく「残り時間」変数を使用することを検討してください。例えば:
local protagonist = {
-- This is the amount of immortality remaining, in seconds
immortalityRemaining = 0,
health = 100
}
-- Then, imagine grabbing an immortality powerup somewhere in the game.
-- Simply set immortalityRemaining to the desired length of immortality.
function protagonistGrabbedImmortalityPowerup()
protagonist.immortalityRemaining = 5
end
-- You then shave off a little bit of the remaining time during each love.update
-- Remember, dt is the time passed since the last update.
function love.update(dt)
protagonist.immortalityRemaining = protagonist.immortalityRemaining - dt
end
-- When resolving damage to your protagonist, consider immortalityRemaining
function applyDamageToProtagonist(damage)
if protagonist.immortalityRemaining <= 0 then
protagonist.health = protagonist.health - damage
end
end
waitやtimerなどの概念には注意してください。通常、スレッドの管理を指します。多くの可動部分があるゲームでは、多くの場合、スレッドを使用せずに物事を管理する方が簡単で予測可能です。可能であれば、スレッド間で作業を同期するのではなく、ゲームを巨大なステート マシンのように扱います。スレッドが絶対に必要な場合、Löve はlove.threadモジュールでそれらを提供します。