0

私は ActionScript での作業が初めてで、タイムラインを使用してゲーム内の特定のイベントをトリガーすることを試しています。特に、タイムラインを使用して銃の発砲イベントをトリガーし、発砲アニメーションが特定のフレームに達したときに弾丸が生成されるようにしています。銃のクラス (Enter_Frame) で、マウスが押されていることと、最後のショットと現在の時間の間の時間がクールダウンよりも長いことを確認します。すべてがチェックアウトされている場合は、アニメーションを再生します。

if (time - lastShot > cooldown)
{
    canShoot = true;
    lastShot = time;
}
if (mouseHold && canShoot)
{
    play();
}

これにより、フレーム レートが、クールダウンが再開する前に完全なアニメーションを再生できないポイントを下回ると、問題が発生します。この場合、フレーム レートが低いと弾丸の発射速度が遅くなります。

さらに、フレーム レートが高いと、フレーム レートが低い場合よりも発射フレームが早く表示されるため、マウス入力に対する銃の応答性が高くなります。

目標は明らかに、ゲームを完全にフレームレートに依存しないものにすることです。銃のクールダウンに応じて、アニメーションのフレーム レートを遅くしたり速くしたりできるようにしたいと考えています。

タイムラインに追加したアクションをスキップせずに、特定の期間にこのアニメーションを再生するにはどうすればよいですか?

4

2 に答える 2

0

アニメーションを正確にし、フレームレートに依存しないようにする場合は、フレーム ベースではなく時間ベースのアニメーションを検討する必要があります。これにより、アニメーションは常に同じになり、遅いコンピューターの遅いフレーム レートを補うことができます。これは非常によく説明されている記事です: http://www.flashgamesclassroom.com/classroom/actionscript/frame-based-vs-time-based-animation/

于 2013-03-02T15:43:02.097 に答える
0

あなたは正しい軌道に乗っているように聞こえますが、これに間違った方法でアプローチしています。Timer クラスをチェックしてください。これはフレームレートに依存せず、非常に役立ちます。

var my_timer = new Timer(1000,0); //in milliseconds
my_timer.addEventListener(TimerEvent.TIMER, catchTimer);
my_timer.start();


function catchTimer(e:TimerEvent)
{
     trace("event fired");
}
于 2013-01-22T17:24:58.157 に答える