0

次のコードがあります。

if(pickedUp == true){
    trace("released and picked up" + pickedUpNum);
    this.storedClick = false;
    this.onMouseMove = null;
    this.onMouseDown = null;
    this.onMouseUp = null;
    this.onEnterFrame = this.refresh;
    pickedUpNum++;
    if( pickedUpNum > 60) pickedUp = false;
}

if(pickedUp == false){
    trace("released and not picked up");
    this.storedClick = false;
    this.onEnterFrame = this.refresh;
    this.onMouseDown = this.onStoreDrag;
    this.onMouseUp = this.onClearStoreDrag;
    this.onMouseMove = null;
}

そして、60前後でこの出力が得られます。

released and picked up59
released and picked up60
released and not picked up
released and picked up61
released and not picked up  

これはどのように可能ですか?私は単純なものが欠けているに違いありません。

私が取り組んでいるプロジェクトは、実際に一枚の紙を拾って動かし、それを元に戻すことをシミュレートしようとしています. この効果を作成するために、フラッシュ ページ フリップ コードを変更しようとしています。

4

10 に答える 10

4

初期条件 ( pickedUpNum, pickedUp) = ( 59, true) のトレースを見てください。最初の条件を実行し、 に追加1pickedUpNumます。1,を追加した後pickedUpNum = 60、内部条件を実行せず、 のpickedUpままにしtrueます。この値を使用して、2 番目の条件をスキップします。

つまり、( pickedUpNum, pickedUp) = ( 60, true) です。最初の条件を再度実行し、 に追加1pickedUpNumます。ではpickedUpNum = 61、内部条件を実行して を設定しpickedUp = falseます。この新しい値で、2 番目の条件が実行されます。

(私が衒学的である場合は申し訳ありませんが、明示的にすることが最善の場合もあります:))

編集:デビッド、私の論理的なタイプミスを見つけてくれてありがとう

于 2009-01-22T02:23:08.877 に答える
3

あなたが何を達成しようとしているのかを完全に理解しているかどうかはわかりません。でも、そんなつもりじゃないの?

if(pickedUp == true){

}
else
if(pickedUp == false){

}
于 2009-01-22T02:19:58.523 に答える
2

わかりました、いくつかのこと。まず、ブール値に対して「==true」と言う必要はありません。次に、一般的に「== false」は使用せず、「!」を使用します。(NOT記号)が、あなたの場合は単に「else」を使用してください

    if(pickedUp){
                trace("released and picked up" + pickedUpNum);
                this.storedClick = false;
                this.onMouseMove = null;
                this.onMouseDown = null;
                this.onMouseUp = null;
                this.onEnterFrame = this.refresh;
                pickedUpNum++;
                if( pickedUpNum > 60) pickedUp = false;
        }  else {
            trace("released and not picked up");
            this.storedClick = false;
            this.onEnterFrame = this.refresh;
            this.onMouseDown = this.onStoreDrag;
            this.onMouseUp = this.onClearStoreDrag;
            this.onMouseMove = null;
    }
于 2009-01-22T09:47:38.013 に答える
2

あなたが書いたコードがループ内にある場合、どういうわけかpickedUpは(pickedUp == false)のチェック後にtrueに設定されています。したがって、次のループでは (pickedUpNum == 61 の場合など)、pickedUp が true になり、true ステートメントが実行され、pickupUp が再び false に設定されます (「true」ステートメントの最後で)。 check) 誤った check ステートメントの実行を許可します。

false チェックの後 (コードごとに pickupNum > 60 の場合) pickUp を true にリセットしていないことを確認してください。意図したとおりに動作するはずです。

于 2009-01-22T18:16:44.240 に答える
0

デバッガを使用しない方法は?flex builder でコードをビルドし、コードを簡単にデバッグできる使いやすいプログラミング環境 (Eclipse) を使用します。

于 2009-01-27T09:12:33.173 に答える
0

コードがループのたびにフラグをリセットしていると思われます。

wile (true)
{
    boolean pickedUp = true // Move this outside the loop ^^

    if (pickedUp == true)
    ....
}
于 2009-01-22T05:21:16.020 に答える
0

Bryan - なぜカイルの答えを受け入れられないのか不思議に思っていたのですが、あなたは実際にこのようなことをしたかったのだと思いました:

released and picked up60
released and not picked up

そして、問題はその後のことだっ。一見したところ、あなたの質問は誤解されていました。これは、誰かが条件付きで行う可能性のある間違いのかなりの教科書の例です。与えられたコードにはそれを説明するものは何もないため、Micheal は正しい考えを持っているようですが、フラッシュ IDE のデバッガーは完全ではありませんが、この種のことを追跡するのに優れていることも付け加えたいと思います。

于 2009-01-27T07:25:21.173 に答える
0

私はシュヴィラムに同意します。ステップスルー デバッガーの使用方法を学習することは非常に価値のあるスキルであり、バグの診断が大幅に容易になります。Flash よりも Flex のデバッガーをお勧めしますが、どちらも無いよりはましです。

于 2009-01-27T10:27:00.853 に答える
0

あなたのすべての質問に答えるために

  • はい、コードはループしています。(onEnterFrame)

  • 「else if」を使用できることはわかっていますが、else を使用すると、2 番目の条件が実行されません。

  • == を使用する必要がなく、not 演算子 (!) を使用できることはわかっていますが、問題があったため、明示的にすることにしました。

  • カイルが彼のコードでソリューションをどのように説明したか、および他の人がそれがソリューションであると信じている理由がわかりません (+2)。

pickedUpNum が 61 に達し、pickedUp が false に設定された後、両方の条件 (pickedUp が true および false) がどのように満たされるのかという問題が残ります。

于 2009-01-22T18:09:34.660 に答える