Actionscript 3 四叉树不准确地检测碰撞

Actionscript 3 四叉树不准确地检测碰撞,actionscript-3,collision-detection,quadtree,Actionscript 3,Collision Detection,Quadtree,我试图实现一个矩形的四叉树,而不是用于碰撞检测的点 由于某些原因,重叠/交叉/碰撞并不总是被检测到。我怀疑这与插入的碰撞器查找附近碰撞器的方式有关,碰撞器会看到Quadtree.as的碰撞A和碰撞B部分。谁能确定为什么会发生这种情况 下面是我的四叉树代码,以及其他几个类,当一起编译时,它们将向您展示我所说的四叉树不准确的意思。您只需要查看Quadtree.as,但将它和其他类一起编译应该可以帮助您理解我的问题 谢谢 Quadtree.as: TestCollider.as: 这是一个如此尴尬和笨

我试图实现一个矩形的四叉树,而不是用于碰撞检测的点

由于某些原因,重叠/交叉/碰撞并不总是被检测到。我怀疑这与插入的碰撞器查找附近碰撞器的方式有关,碰撞器会看到Quadtree.as的碰撞A和碰撞B部分。谁能确定为什么会发生这种情况

下面是我的四叉树代码,以及其他几个类,当一起编译时,它们将向您展示我所说的四叉树不准确的意思。您只需要查看Quadtree.as,但将它和其他类一起编译应该可以帮助您理解我的问题

谢谢

Quadtree.as:

TestCollider.as:


这是一个如此尴尬和笨拙的错误。如果查看Quadtree.as下的Node.collide子体,您会注意到第一行是

var max:int = 0;
应该是什么时候

var max:int = colliders.length;
难怪新插入的碰撞器将无法看到属于其下节点的碰撞器节点属于该碰撞器插入的节点的子节点


真的很尴尬。

这是一个如此尴尬和笨拙的错误。如果查看Quadtree.as下的Node.collide子体,您会注意到第一行是

var max:int = 0;
应该是什么时候

var max:int = colliders.length;
难怪新插入的碰撞器将无法看到属于其下节点的碰撞器节点属于该碰撞器插入的节点的子节点

真让人难堪

package  
{
    import flash.geom.Rectangle;

    public class TestCollider extends Collider
    {
        private var rectangle:Rectangle;
        private var parent:TestObject;

        public function TestCollider( parent:TestObject, x:Number, y:Number, width:Number, height:Number )
        {
            this.parent = parent;
            rectangle = new Rectangle( x, y, width, height );
        }

        override public function get colliderRectangle() : Rectangle
        {
            return rectangle;
        }

        override public function collide( collider:Collider ) : void 
        {
            var otherRect:Rectangle = collider.colliderRectangle;
            if( rectangle.intersects( otherRect ) )
            {
                var intersection:Rectangle = rectangle.intersection( otherRect );
                if( intersection.width < intersection.height )
                {
                    parent.x += intersection.width * 0.5 * ( rectangle.x < otherRect.x ? -1 : 1 );
                }
                else
                {
                    parent.y += intersection.height * 0.5 * ( rectangle.y < otherRect.y ? -1 : 1 );
                }
                parent.direction.x *= ( ( parent.direction.x > 0 && otherRect.x > rectangle.x ) || ( parent.direction.x < 0 && otherRect.x < rectangle.x ) ? -1 : 1 );
                parent.direction.y *= ( ( parent.direction.y > 0 && otherRect.y > rectangle.y ) || ( parent.direction.y < 0 && otherRect.y < rectangle.y ) ? -1 : 1 );
            }
        }
    }
}
var max:int = 0;
var max:int = colliders.length;