2011-12-15 138 views
0

我试图做一个简单的游戏,当球落入某个块时,你赢了。AS3:如何检测碰撞?

机制:球通过几个障碍物落下,最后有两个方块,如果球碰到你赢的左方块,下一个关卡将包含更多的块和更少的空间。

测试影片(点击屏幕上砸球): http://gabrielmeono.com/downloads/Lucky_Hit_Alpha.swf

这些是主要的变量:

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

问:

  • 如何检测交流电如果球击中winBox,ollision并发挥作用? (赢消息/下一等级)*

谢谢你,这里是全码:

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 2011-12-15 18:51:10

回答

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

有可用的一些库可以处理碰撞检测。一个简单的谷歌搜索应该返回不少。

在此期间,您可以随时查询该article

0

如果两个对象的边界框重叠并且两个对象的边界圆重叠,则圆和矩形会发生碰撞。

但是就像加布里埃尔说的那样,除非你真的想了解它背后的机制,否则你会更好地使用一些现有的库,而不是写自己的库。

0

Flixel是开始制作游戏的好库,碰撞检测是一项核心功能。

除非这是不允许外部库的类分配?