2011-11-23 68 views
0

我在处理碰撞检测工作时遇到了一些问题。我已经过测试,以确保它检测到碰撞,并且确实如此,但是我无法在它穿过该区块时使其工作。我也尝试在碰撞后从x值中减去-10,但它会保持前几次尝试,然后只是通过块。碰撞检测Flash Builder

private function collisionDetect(evt:Event):void{ 
    if(IMG3.hitTestObject(block)){ 
     if(IMG3.x > block.x){ 
      IMG3.x = block.x-1; 
     } 
    } 
} 
+0

如何hitTestObject工作,并在collisionDetect触发时,我不认为这是可能为他人找到这个片段答案。 – kyohiro

+1

如果两个对象碰撞,hitTestObject返回true,碰撞检测由addEventListener(Event.ENTER_FRAME,collisionDetect)触发; – user1017243

+1

'IMG3.x> block.x'这是有问题的,除非IMG3位于右边缘,块的中心位于左边缘。你需要考虑它们的宽度,所以假设它们都以左边缘为中心,则正确的是'IMG3.x + IMG3.width> block.x'。 – felipemaia

回答

0

这取决于物体移动的速率。提供你想要完成的更多细节。如果两个对象矩阵相互碰撞,你的代码应该可以正常工作,而且img的中心点x大于块的中心点x。

负责移动物体的代码在哪里?

反正另一种方法将是一个while循环:

private function collisionDetect(evt:Event):void{ 
    if(IMG3.hitTestObject(block)){ 
    while (IMG3.x > block.x) 
    { 
     IMG3.x--; 
    } 
    } 
} 

但同样这取决于IMG如何移动到开始和它在代码中发生的。还要注意felipemaia对物体中心点的评论。正确的方法是(IMG3.x + IMG3.width/2) > (block.x - block.width/2)假设对象的中心点确实是它们的精确中心。

P.S改写标题 - 这不是一个Flash Builder问题