我得到了一个框架上的动作,我想要做的是有一个hitTest,当我正在绘制的形状与touchTest发生冲突时,会触发gotoAndStop(<lose frame>)。我遇到的唯一问题是,当行命中hitTest时,我无法让它直接注册,它只在下一个单击事件之后注册。我遇到的另一个问题是,touchTest上的一个命中框比符号的实际图像大很多倍。
var myshape:Shape;
myshape = new Shape();
myshape.graphics.lineStyle(5, 0xC807DE);
var alreadyDrawn:Shape;
alreadyDrawn = new Shape();
stage.addEventListener(MouseEvent.MOUSE_DOWN, activateDraw);
function activateDraw(event:MouseEvent):void
{
myshape.graphics.moveTo(mouseX,mouseY);
addChild(myshape);
stage.addEventListener(MouseEvent.MOUSE_MOVE, lineDraw);
stage.addEventListener(MouseEvent.MOUSE_UP, stopDraw);
}
function lineDraw(event:MouseEvent):void
{
myshape.graphics.lineTo(mouseX,mouseY);
checkIt();
}
function stopDraw(event:MouseEvent):void
{
alreadyDrawn.graphics.copyFrom(myshape.graphics);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, lineDraw);
stage.removeEventListener(MouseEvent.MOUSE_UP, stopDraw);
}
function checkIt()
{
if (alreadyDrawn.hitTestObject(touchTest) == true)
{
trace("wall");
myshape.graphics.clear();
myshape.graphics.lineStyle(5, 0xC807DE);
alreadyDrawn.graphics.clear(); // clear this too
stopDraw(null); // stop active draw, if any
}
}发布于 2014-10-27 16:37:10
它只在下一次单击事件之后注册。
这是因为您正在测试与alreadyDrawn的碰撞的对象还没有冲突区域。您可以创建新的形状,添加侦听器,并使用方法lineDraw()在checkIt()中测试碰撞,但在鼠标向上函数stopDraw()执行alreadyDrawn.graphics.copyFrom(myshape.graphics);之前,该形状没有碰撞区域。
因此,要解决这个问题,您必须在前面创建图形对象。变化可能类似于这样(在顶部):
var alreadyDrawn:Shape = new Shape();
alreadyDrawn.graphics.copyFrom(myshape.graphics);这将提供一个在checkIt()中测试的碰撞区域。
我遇到的另一个问题是,touchTest上的一个命中框比符号的实际图像大很多倍。
对于此问题,您可以访问剪辑或其中的符号,并相对于alreadyDrawn形状的父形状获取其边界。然后,您可以使用两个形状的边界来测试碰撞。这将为您提供一个更精确的碰撞区域进行测试:
function checkIt()
{
var alreadyDrawnBounds:Rectangle = alreadyDrawn.getBounds( alreadyDrawn.parent );
var testBounds:Rectangle = touchTest.someSymbolName.getBounds( alreadyDrawn.parent );
//could also try this instead:
//var alreadyDrawnBounds:Rectangle = alreadyDrawn.getBounds( touchTest.parent );
//var testBounds:Rectangle = touchTest.getBounds( touchTest );
if ( alreadyDrawnBounds.intersects( testBounds ) ) {
trace("wall");
myshape.graphics.clear();
myshape.graphics.lineStyle(5, 0xC807DE);
alreadyDrawn.graphics.clear(); // clear this too
stopDraw(null); // stop active draw, if any
}
}https://stackoverflow.com/questions/26580898
复制相似问题