0

だから私は「AI」の動きを表現する次のコードを持っています。pdl_RはAIパドル、AIHはAIの高さ、AIHSはAIの高さの速度です。AIHによってパドルをAIHSの方向に移動させるコードが必要です。

pdl_R.y=AIH;
AIH+=(3*AIHS);  
if(pdl_R.y==stage.stageHeight || pdl_R.y==stage.stageHeight-pdl_R.height)
{
    AIHS*=-1;
}

ただし、pdl_R(AIパドル)が画面の下部に到達すると(デフォルトの方向は下向き)、そこにとどまり、(予想される方向の切り替えではなく)3ピクセル上下に点滅します。

私の最初のAIHは200で、最初のAIHSは1です。

4

2 に答える 2

0

AIH が stage.stageHeight に達すると、次のことが起こります。

  1. Y には stage.stageHeight (==AIH) が割り当てられます
  2. AIH は 3*AIHS (==3、AIHS==1 と仮定します。ただし、AIHS の実際の値は重要ではなく、その符号のみが重要です) だけインクリメントされます。したがって、パドルは実際には必要以上に 3 ピクセル移動します。
  3. 条件を確認すると、それは真なので、AIHS=-1*AIHS です。AIHS は現在 -3 です。
  4. 次のフレームでは、Y に AIH (==stage.stageHeight+3) が割り当てられます。AIH は AIHS だけインクリメントされ、再び stage.stageHeight に等しくなります。チェック条件は偽です。AIHS に変更はありません。パドルが上向きになりました。
  5. 次のフレームで、Y には stage.stageHeight に等しい AIH が割り当てられますが、パドルは上に移動しています! したがって、再度状態を確認すると、AIHS は +3 に戻ります。そして、AIH はすでに stage.stageHeight-3 なので、さらに 2 フレーム繰り返されます。

修正は、AIHS を変更した後に AIH のインクリメントを配置することです。これは実際にはエラーの最も一般的な原因です。最初に変更してから適用するのではなく、最初に変更されていない値を適用してから変更します。

于 2012-11-07T12:49:46.530 に答える
0

次の if ステートメントでは、次のようになります。

if(pdl_R.y==stage.stageHeight || pdl_R.y==stage.stageHeight-pdl_R.height)
{
    AIHS*=-1;
}

パドルの高さ (30) とステージの高さ (600) の数値例を使用すると、次のようになります。

if(paddle.y == 600 || paddle.y == 570)
{
  ReversePaddleDirection
}

これは、パドルが 570 と 600 の間で永遠にバウンドし、どちらか一方に達するとすぐに反転するため、パドルが底で動かなくなることを説明しています。

そうでない場合は、さらに詳細な情報 (つまり、実際のステージの高さとパドルの高さ) を使用して、さらにデバッグすることができます。

于 2012-11-07T11:09:05.673 に答える