0

まず第一に私の英語が悪かったのであれば謝罪、私はインドネシアだこの質問のActionScript 3:キャラクターは、アレイ内のすべてのオブジェクトとテストオブジェクトをヒット

を読んで誰の注目していただきありがとうございます。

私は現在、Flash ActionScript 3またはUnityを使用してタッチスクリーンAndroidゲームを作成していますが、私の現在のプロジェクトはActionScript 3でFlashを使用しています。私の現在の仕事は、女性スキューバダイバー水中に落ちる魚の爆弾を絶滅させます。

私はダイバーが画面内のすべての爆弾について警告するようにしようとしています。私はランダムなxの位置に落ちるRegularBombクラスを呼び出すBombsLayerクラスを持っています。すべてのRegularBombインスタンスはArrayに配置され、次にhitTestObjectでループするたびに使用されるので、ダイバーがムービークリップ内の透明な円に当たった場合、感嘆符が表示され、ダイバークラスのreadyToDefuseブール値をtrueに設定し、ダイバーがブール値はfalseに設定され、感嘆符は消えます。

私の問題は、潜水艦がアレイ内の最後の爆弾ムービークリップインスタストとしか対話できないことです。最初の爆弾の子供が配列に追加され、ダイバーがそれに達すると、感嘆符が現れますが、新しい爆弾がインスタンス化されるたびに感嘆符が消えて、私はダイバーが新しい爆弾に移動して看板を作るようにしなければなりません現れる。

私はこの質問の提案を読んでいます:AS3 - array hit test in 'for each' loop only works properly with last object in array forループごとにelse文を削除しますが、それを削除するとreadyToDefuseはTrueのままで、感嘆符は表示されたままになります。

私はGoogleの検索を行っているし、何も私の問題に答えているようだ、ここ

は私の完全なコードです..私は、プレゼンテーションまで一週間、このゲームを完了する必要があり、これは、これらの過去の日のために私は混乱して運転していましたBombslayerクラス用:

package { 
    import flash.display.MovieClip; 
    import flash.display.Sprite; 
    import flash.events.Event; 

    public class BombsLayer extends MovieClip{ 
     public var area:Sprite; 
     public var bombs:Array; 
     public var bomb:RegularBomb; 
     public var bombground:BombGround; 
     public var diver:Diver; 
     public var warner:BombWarn; 

     public function BombsLayer(character:Diver, warn:BombWarn){ 
      // constructor code 
      area = new Sprite(); 
      area.graphics.beginFill(000000, 0); 
      area.graphics.drawRect(0,0,2200,720); 
      area.graphics.endFill(); 
      addChild(area); 

      diver = character; 
      warner = warn; 

      bombs = new Array(); 
      var newBomb = new RegularBomb(Math.random()*area.width, diver, warner); 
      bombs.push(newBomb) 
      addChild(newBomb); 

      bombground = new BombGround(0, 670, this); 
      addChild(bombground); 

      this.addEventListener(Event.ENTER_FRAME, moveBomb); 
     } 
     function moveBomb(event:Event){ 
      if(Math.random() <= 0.0005){ 
       var newBomb = new RegularBomb(Math.random()*area.width, diver, warner); 
       bombs.push(newBomb) 
       addChild(newBomb); 
      } 
      for each(var bomb:RegularBomb in bombs){ 
       bomb.moveDown(); 
       if(diver.hitTestObject(bomb)){ 
        warner.visible = true; 
        diver.readyToDefuse = true; 
       } 
       else{ 
        warner.visible = false; 
        diver.readyToDefuse = false; 
       } 
      } 
     } 
    } 
} 

私はあまりにも完全なプロジェクトをアップロードすることができ、必要に応じて..

すべてが認識されるであろうことができます。 ありがとうございました!

答えて

0

ロジックが間違っています。あなたは爆弾を拾い読みしてダイバーと接触しているものを見つけ、唯一の爆弾で作業する必要があります。さもなければ、ダイバーはボンベAを解体する準備が整うが、B、CおよびDを解体する準備はできていないので、準備が整っていない。

function moveBomb(event:Event) 
{ 
    var aBomb:RegularBomb; 

    if (Math.random() <= 0.0005) 
    { 
     aBomb = new RegularBomb(Math.random() * area.width, diver, warner); 
     bombs.push(aBomb) 
     addChild(aBomb); 
    } 

    for each(aBomb in bombs) aBomb.moveDown(); 

    // Find bomb in diver's vicinity. 
    aBomb = findBomb(); 

    // The same as "if (aBomb != null)" 
    if (aBomb) 
    { 
     warner.visible = true; 
     diver.readyToDefuse = true; 
    } 
    else 
    { 
     warner.visible = false; 
     diver.readyToDefuse = false; 
    } 
} 

function findBomb():RegularBomb 
{ 
    for each(var aBomb:RegularBomb in bombs) 
     if (diver.hitTestObject(aBomb)) 
      return aBomb; 

    return null; 
} 
+0

実際にそれはちょうど始まりです、各爆弾が到達し、ユーザーが解錠ボタンを保持しているため、爆弾の後任のインジケータが充電され、満了すると、爆弾の子供は消滅し、爆弾の子供は配列から取り除かれます。 また、爆弾だけでなく、サメ、クラゲ、海蛇、ふわふわの魚などの危険な海の生き物と同じやり取りをしたいと思っていましたが、警告を受ける代わりにダイバーがそれらの1つに当るとダイバーの健康ポイントが低下します。私は同じことをしなければならないのですか? ところでありがとうございます! –

+0

@AzmiFarhanいいえ、インスタントヒットのロジックは異なります。一般的な言葉で考えてみてください。ダイバーは1本の爆弾を選び、それを解消する準備をしてください。そして、**危険な魚はどれくらいの数の魚に関係なく、即座にダイバーにダメージを与えます。 – Organis

+0

私は以前のロジックを魚のために使うべきですか? –

関連する問題