2011-12-15 5 views
0

私は単純なゲームを作ろうとしています。ボールが特定のブロックに入ると勝ちます。AS3:どのように衝突を検出するのですか?

力学:ボールはいくつかの障害物を通過し、最終的に2ブロックあります。ボールがあなたが勝つ左側のブロックに接触すると、次のレベルにはより多くのブロックとそれらの間のスペースが含まれます。

テスト動画(ボールをドロップするには、画面をクリックしてください):

var winBox:QuickObject;//You win 
    var looseBox:QuickObject;//You loose 
    var gameBall:QuickObject;//Ball dropped 

質問:

おかげで、ここでの完全なコードは次のとおりです。

package { 

    import flash.display.MovieClip; 
    import com.actionsnippet.qbox.*; 
    import flash.events.MouseEvent; 

    [SWF(width = 600, height = 600, frameRate = 60)] 

    public class LuckyHit extends MovieClip { 

     public var sim:QuickBox2D; 
     var winBox:QuickObject; 
     var looseBox:QuickObject; 
     var gameBall:QuickObject; 

     /** 
     * Constructor 
     */ 
     public function LuckyHit() 
     { 
      sim = new QuickBox2D(this); 
      //sim.createStageWalls(); 
      winBox = sim.addBox({x:5,y:600/30, width:300/30, height:10/30, density:0}); 
      looseBox = sim.addBox({x:15,y:600/30, width:300/30, height:10/30, density:0}); 


      // make obstacles 
      for (var i:int = 0; i<(stage.stageWidth/50); i++){ 
      //End 
       sim.addCircle({x:1 + i * 1.5, y:16, radius:0.1, density:0}); 
       sim.addCircle({x:2 + i * 1.5, y:15, radius:0.1, density:0}); 

      //Mid End 

        sim.addCircle({x:0 + i * 2, y:14, radius:0.1, density:0}); 
        sim.addCircle({x:0 + i * 2, y:13, radius:0.1, density:0}); 
        sim.addCircle({x:0 + i * 2, y:12, radius:0.1, density:0}); 
        sim.addCircle({x:0 + i * 2, y:11, radius:0.1, density:0}); 
        sim.addCircle({x:0 + i * 2, y:10, radius:0.1, density:0}); 


      //Middle Start 
       sim.addCircle({x:0 + i * 1.5, y:09, radius:0.1, density:0}); 
       sim.addCircle({x:1 + i * 1.5, y:08, radius:0.1, density:0}); 
       sim.addCircle({x:0 + i * 1.5, y:07, radius:0.1, density:0}); 
       sim.addCircle({x:1 + i * 1.5, y:06, radius:0.1, density:0}); 

      } 

      sim.start(); 


      stage.addEventListener(MouseEvent.CLICK, _clicked); 
     } 

     /** 
     * .. 
     * @param e MouseEvent.CLICK 
     */ 

     private function _clicked(e:MouseEvent) 
     { 
      gameBall = sim.addCircle({x:(mouseX/30), y:(1), radius:0.25, density:5}); 


     } 
    } 

} 
+0

box2dに慣れていないので間違っていない限り、[hitTestObject](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#hitTestObject ())、それがtrueを返した場合、あなたが望む関数を呼び出します。 – ToddBFisher

答えて

1

編集確認することができますが追加されました第二引数のgameBallを。

私はQuickBox2Dに精通していませんが、このショットをしてください。

var simContacts:QuickContacts; 

public function LuckyHit() 
{ 
    ... 
    simContacts = sim.addContactListener(); 
    simContacts.addEventListener(QuickContacts.ADD, contactListener); 
} 

... 

private function contactListener(event:Event) 
{ 
    if (simContacts.isCurrentContact(winBox, gameBall)) 
    { 
     // They won. 
    } 
} 

QuickBox2D documentation内の関連するクラスは、QuickContactsです。

0

衝突検出を扱うことができる利用可能ないくつかのライブラリがあります。単純なGoogleの検索ではかなりの数が返されます。一方

、あなたは常にこのarticle

0

両方のオブジェクトの境界ボックスが重なり、両方のオブジェクトの境界円が重なっていると、円と四角形が衝突しています。

しかしGabrielのように、あなたは本当にその背後にある仕組みを理解しない限り、あなた自身で作成するのではなく、いくつかの既存のライブラリを使う方が良いでしょう。

0

Flixelは初めのゲーム作成のための優れたライブラリであり、衝突検出はコア機能です。

これは、外部ライブラリを許可しないクラス割り当てでない限りですか?