Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 使用位图.hittest在actionscript中检测冲突_Actionscript 3 - Fatal编程技术网

Actionscript 3 使用位图.hittest在actionscript中检测冲突

Actionscript 3 使用位图.hittest在actionscript中检测冲突,actionscript-3,Actionscript 3,好的,我有两个png文件,一个圆和一个迷宫。迷宫基本上是一个正方形,有一些路径穿过它。我想画这些图像,将圆移动到鼠标坐标,当圆与迷宫的墙壁相交时,有一个文本说“击中”,当它没有相交时,有一个文本说“错过”。现在,我想使用bitmapdata.hittest方法执行这些操作。圆圈为32x32图像,迷宫为256*256图像。我已经把所有的东西都设置好了,所有的东西都正确地显示在屏幕上,但是我不能让它的实际碰撞检测部分工作,也就是说,它总是显示“未命中”而不是“命中”,即使当圆明显地与迷宫相交时。以下

好的,我有两个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';
            }
        }
    }
}

有人能告诉我我做错了什么吗?

在将图像绘制到
位图数据之前,您必须等待图像加载

        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);

此时,您正在拍摄加载程序的“快照”,但加载程序没有内容。因此,您应该等待
事件。完成
事件以在每个加载器上激发,并绘制到
位图数据
对象。

那么我该怎么做呢?我尝试过:LOADER_1.contentLoader.addEventListener(Event.COMPLETE,LOADED_1);但是有一个编译器错误。好的,我已经编译了它(它是contentLoaderInfo),但是现在什么都没有显示。这就是我所做的(如果没有正确显示,那么很抱歉):LOADER_2.contentLoaderInfo.addEventListener(Event.COMPLETE,LOADED_2);LOADER_2.load(新的URLRequest('TEST.png');函数LOADED_2(event:event):void{LOADER_2.x=125;LOADER_2.y=125;DATA_2=new BitmapData(256256,true,0);DATA_2.draw(LOADER_2);addChild(LOADER_2);}我最后改用了嵌入。。。我不喜欢它,但它更容易使用。