Actionscript 3 使用位图.hittest在actionscript中检测冲突
好的,我有两个png文件,一个圆和一个迷宫。迷宫基本上是一个正方形,有一些路径穿过它。我想画这些图像,将圆移动到鼠标坐标,当圆与迷宫的墙壁相交时,有一个文本说“击中”,当它没有相交时,有一个文本说“错过”。现在,我想使用bitmapdata.hittest方法执行这些操作。圆圈为32x32图像,迷宫为256*256图像。我已经把所有的东西都设置好了,所有的东西都正确地显示在屏幕上,但是我不能让它的实际碰撞检测部分工作,也就是说,它总是显示“未命中”而不是“命中”,即使当圆明显地与迷宫相交时。以下是我所做的:Actionscript 3 使用位图.hittest在actionscript中检测冲突,actionscript-3,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';
}
}
}
}
有人能告诉我我做错了什么吗?在将图像绘制到
位图数据之前,您必须等待图像加载
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);}我最后改用了嵌入。。。我不喜欢它,但它更容易使用。