使用bitmap.hittest在actionscript中进行碰撞检测

时间:2010-08-26 23:12:25

标签: actionscript-3

好的,我有两个png文件,一个圆圈和一个迷宫。基本上迷宫是一个正方形,通过它雕刻了一些路径。我想绘制这些图像,将圆圈移动到鼠标坐标,并在圆圈与迷宫的墙壁相交时有一个文字说“点击”,而当它没有时,则会“错过”。现在我想使用bitmapdata.hittest方法来完成这些操作。圆圈是32x32图像,迷宫是256 * 256图像。我已经完成了所有设置并且所有内容都正确地在屏幕上绘制但是我无法使其实际的碰撞检测部分工作,即使圆圈与圆圈明显相交时它始终显示“未命中”而不是“命中”迷宫。这就是我所做的:

package 
{
    import flash.display.*;     
    import flash.events.*;
    import flash.geom.*;
    import flash.text.TextField;
    import flash.utils.getTimer;
    import flash.net.URLRequest;
    import flash.ui.Mouse;
    import flash.system.*;
    import Math;
    public class MAIN extends Sprite
    {
        private var TEXT:TextField = new TextField();
        public var LOADER_1:Loader = new Loader();
        public var LOADER_2:Loader = new Loader();
        public var DATA_1:BitmapData;
        public var DATA_2:BitmapData;

        public function MAIN()
        {   
            LOADER_2.load(new URLRequest('TEST.png'));
            LOADER_2.x = 125;       LOADER_2.y = 125;
            DATA_2 = new BitmapData(256,256,true,0);
            DATA_2.draw(LOADER_2);
            addChild(LOADER_2);

            LOADER_1.load(new URLRequest('BALL.png'));
            LOADER_1.x = mouseX;        LOADER_1.y = mouseY;
            DATA_1 = new BitmapData(32,32,true,0);
            DATA_1.draw(LOADER_1);
            addChild(LOADER_1);

            Mouse.hide();
            stage.frameRate = 60;
            addChild(TEXT);
            stage.addEventListener(Event.ENTER_FRAME,STEP);
        }
        public function STEP(event:Event):void
        {
            LOADER_1.x = mouseX;
            LOADER_1.y = mouseY;

            if (DATA_1.hitTest(new Point(LOADER_1.x,LOADER_1.y),255,DATA_2,new Point(LOADER_2.x,LOADER_2.y)))
            {
                TEXT.text = 'hit';
            }
            else
            {
                TEXT.text = 'miss';
            }
        }
    }
}

那么有人可以告诉我这里我做错了吗?

1 个答案:

答案 0 :(得分:0)

您需要等到图片加载后再将其绘制到BitmapData

        LOADER_2.load(new URLRequest('TEST.png'));
        LOADER_2.x = 125;       LOADER_2.y = 125;
        DATA_2 = new BitmapData(256,256,true,0);
        DATA_2.draw(LOADER_2);

此时您正在获取加载程序的“快照”,但加载程序没有内容。因此,您应该在每个加载器上触发Event.COMPLETE事件,并将其绘制到BitmapData对象。