AS3 hitTestPoint总是为一个函数返回false

时间:2011-09-18 08:16:28

标签: actionscript-3

我画了一个名为Map的movieclip。它有一个名叫Wall的孩子。我正在尝试创建一个函数,如果该块中有某些东西,则返回一个2d tile数组,用于寻路。

问题是,levelGrid完全是假的。我不确定我做错了什么。

我用鲜红色填充整个movieclip(Wall),是的,它仍然返回false。

Map和Wall的x和y都是0,所以我认为hitTestPoint不应该接受全局x / y。

它们被添加到显示列表中。

我的其他运动测试工作正常。

我的代码:

public function levelMap() {
    for (var i = 0; i < height / 25; i++) {
        levelGrid[i] = [];
        for (var j = 0; j < width / 25; j++) {
            levelGrid[i][j] = this.getChildByName("Wall").hitTestPoint(j*25,i*25,true);
        }
    }
    trace(levelGrid);
}

提前致谢(levelGrid是一个类变量)

1 个答案:

答案 0 :(得分:1)

我用你的代码进行了视觉测试。我没有改变任何功能,所以我认为你的问题是你的图形。检查图形的宽度,高度位置。如果你在数组中没有得到任何东西,那么这些值可能没有正确设置。

每个点代表此测试中的hitTestPoint。如果它的绿色你有一个命中(真实的返回值)。红色意味着没有打击。希望这可以帮助。


TestHitPoint.as

package
{
    import flash.display.Sprite;

    public class TestHitPoint extends Sprite
    {

        private static const TILE_SIZE : int = 25;

        private var levelGrid : Array;

        public function TestHitPoint()
        {

            // add graphics to test
            addChild( new WallGraphics() );

            // fix array
            levelGrid = new Array();

            // loop
            for (var i : int = 0; i < height / TILE_SIZE; i++)
            {
                levelGrid[i] = [];

                for (var j : int = 0; j < width / TILE_SIZE; j++)
                {
                    var success : Boolean = this.getChildByName("Wall").hitTestPoint(j*TILE_SIZE, i*TILE_SIZE, true);

                    levelGrid[i][j] = success;

                    addChild( new PositionMarker(j*TILE_SIZE, i*TILE_SIZE, success) );
                }
            }
        }

        public function levelMap() : void
        {

        }

    }
}
import flash.display.Sprite;

internal class WallGraphics extends Sprite
{
    public function WallGraphics() 
    {
        name = "Wall";

        with(graphics)
        {
            beginFill(0x0000FF, 1);
            drawRect(100, 50, 60, 200);
            drawRect(50, 100, 200, 50);
            endFill();
        }
    }
}

internal class PositionMarker extends Sprite
{
    public function PositionMarker(posX : Number, posY : Number, success : Boolean) 
    {
        with(graphics)
        {
            beginFill((success) ? 0x00FF00 : 0xFF0000, 1);
            drawCircle(posX, posY, 4);
            endFill();
        }
    }
}

输出:

enter image description here