0

「ポイント」タイプの可変速度が変更の呼び出しなしで変更されるという問題があります。

private function framecode(e:Event) {
  trace(getVelocity().y);
  tracks.gotoAndStop(2);
  trace(getVelocity().y);
}

このコードは、速度が使用されるクラス (私の移動オブジェクト クラス)を拡張する「タンク」と呼ばれるクラスの一部です。速度はプライベート ポイント型変数であり、getVelocity()はパブリック アクセス メソッドです。trackは、 tankにリンクされたものに含まれる名前付きの movieClipです。イベントリスナーは ENTER_FRAME です。トラックのフレームにコーディングはありません。

どういうわけか、これらの 2 つのトレースは異なる値を示し (最初のトレースは正しい)、gotoAndStop() がどのように影響する可能性があるか (したがって、それを修正する方法) を理解できません。

play() ではバグが再現されませんが、prevFrame() と nextFrame() では再現されることがわかりました。変数はプライベートであるため、このクラスは変数にアクセスして変更することさえできません。

もう 1 つの奇妙な点は、イベント リスナーが FRAME_CONSTRUCTED または EXIT_FRAME に変更された場合、大きな遅延が発生し、数秒後に movieClip がランダムに消えることです。

読んでいただきありがとうございます。

4

1 に答える 1

1

あなたのvelocity変数はプライベートなので、1 つはクラスの外部にアクセスできます。

ただし、変数getVelocity()への参照を返していvelocityます。誰かがその参照を取得すると、そのプロパティの値を変更できます: getVelocity().y = 3. したがって、これが起こることは不可能ではありません。

これをトラブルシューティングする 1 つの方法はtrace()、ブレークポイントにステートメントを追加/設定してgetVelocity()、それが使用されている場所を確認できるようにすることです。

クラスで同様のことを行うこともできPointますが、それを拡張し、getter/setter メソッドを追加してy(呼び出されたときにトレースします)、getter/setter を使用するようにコードを変更する必要があります。これは価値があるかもしれません (十分に単純です)。getter を使用するようにコードを変更すると、問題がどこにあるかを発見するのに役立つ場合があります。

于 2013-07-02T18:20:49.183 に答える