• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ac3 if 構文の作り方)

AC3 if構文の作り方

このQ&Aのポイント
  • AC3 if構文の作り方を学びましょう。
  • box1が動き出して、box1がbox2を上回った時にbox2も動き出すアルゴリズムの作り方について詳しく教えてください。
  • box1とbox2の位置を変更することでアルゴリズムの動きを調整できます。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

スクリプトも全体的に変ですが それ以前に 「動かす対象物は何なのか」 「何の座標と何の座標とを比較するのか」 これをご自身の中でハッキリさせましょう。 まず, 「動かす対象物はスプライト『box1』と『box2』」 なのでしょう? そして, 「スプライト『box1』と『box2』の座標を比較する」 のでしょう? ↑この2点をキッチリと意識してください。 書かれていらっしゃるスクリプトの var box1:Sprite=new Sprite; と var box2:Sprite=new Sprite; で スプライト『box1』と『box2』ができます。 しかしその後, 各スプライトの座標は指定されていません。 座標を指定しなければ それらスプライトは (x,y)=(0,0) にできます。 つまり最初から 『box1』と『box2』の座標は等しくて どちらとも (x,y)=(0,0) なのです。 『box1』のx座標が『box2』のx座標の値を上回るときなど 『box1』が動きだした直後です。 土台からして考えなおす必要がありますよね。   それと, それぞれのインスタンスに対して別々のイベントリスナー(関数)を登録するのではなくて 1つのイベントリスナー(関数)で済ませる方が管理がずっと簡単になるのではないでしょうか? というわけで 私でしたら次のようにするでしょう。 //------------------------------------ //スプライト「box1」を作成 var box1:Sprite = new Sprite(); //スプライト「box1」の座標を指定 box1.x = 50; box1.y = 100; //スプライト「box1」内に緑■を描画 box1.graphics.beginFill(0x00FF00); box1.graphics.drawRect(0,0,50,50); box1.graphics.endFill(); //スプライト「box2」を作成 var box2:Sprite = new Sprite(); //スプライト「box2」の座標を指定 box2.x = 100; box2.y = 200; //スプライト「box2」内に緑■を描画 box2.graphics.beginFill(0x00FF00); box2.graphics.drawRect(0,0,50,50); box2.graphics.endFill(); //スプライト「box1」と「box2」を配置 addChild(box1); addChild(box2); //毎フレーム 関数 mo を実行 this.addEventListener(Event.ENTER_FRAME,mo); //関数 mo の定義 function mo(e:Event):void { //「box1」を右に1pxずつ移動 box1.x += 1; //もし「box1」のx座標が「box2」のx座標より大きくなれば if (box1.x>box2.x) { //「box2」を右に1pxずつ移動 box2.x+=1; } } //------------------------------------ ========================== ついでに..., > 自身で調べたところでは > そのようなプロパティーの記述は見当たりませんでした。 > isMovingについてご解説いただければ幸いです。 isMoving は anyhelp さんが適当に作られた変数ですよ。 変数と言ってもフラグの役割を果たす変数です。 「box1」のx座標が「box2」のx座標より大きくなった次の瞬間から box2.addEventListener(Event.ENTER_FRAME,mo2); をし続けるのは変ですよね? ですからフラグを false で用意しておいて 「box1」のx座標が「box2」のx座標より大きくなった次の瞬間にだけ box2.addEventListener(Event.ENTER_FRAME,mo2); を実行させると同時にフラグを true にして その後は addEventListener を繰り返し実行させないようにしているのです。 「フラグ (コンピュータ) - Wikipedia」 http://ja.wikipedia.org/wiki/%E3%83%95%E3%83%A9%E3%82%B0_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)

naonao321
質問者

お礼

おっしゃる通りでした。 それぞれのboxを四角ツールで恣意的に置いた状態から、記述をした為に boxの位置の記述を省くということをしていました。説明が不足して大変申し訳ありません。ありがとうございました。

その他の回答 (1)

  • anyhelp
  • ベストアンサー率43% (79/181)
回答No.1

box2.isMoving=false; function mo(e:Event):void{ box1.x += 1; if(!box2.isMoving && box1.x>box2.x){ box2.addEventListener(Event.ENTER_FRAME,mo2); box2.isMoving=true; } } function mo2(e:Event):void{ box2.x += 1} となります。

naonao321
質問者

お礼

ありがとうございました。

naonao321
質問者

補足

早速のご回答、助かります。 御記述いただいたものの中にisMovingというプロパティーがありますが、 これはas3でも適用されるものなのでしょうか? 自身で調べたところではそのようなプロパティーの記述は見当たりませんでした。 isMovingについてご解説いただければ幸いです。 よろしくお願い致します。 (adobe flash cs5にて記述してみましたがisMovingを認識しませんでした。)

関連するQ&A