首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Actionscript hitTest绘图

Actionscript hitTest绘图
EN

Stack Overflow用户
提问于 2014-10-27 03:43:17
回答 1查看 210关注 0票数 1

我得到了一个框架上的动作,我想要做的是有一个hitTest,当我正在绘制的形状与touchTest发生冲突时,会触发gotoAndStop(<lose frame>)。我遇到的唯一问题是,当行命中hitTest时,我无法让它直接注册,它只在下一个单击事件之后注册。我遇到的另一个问题是,touchTest上的一个命中框比符号的实际图像大很多倍。

代码语言:javascript
复制
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
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-27 16:37:10

它只在下一次单击事件之后注册。

这是因为您正在测试与alreadyDrawn的碰撞的对象还没有冲突区域。您可以创建新的形状,添加侦听器,并使用方法lineDraw()checkIt()中测试碰撞,但在鼠标向上函数stopDraw()执行alreadyDrawn.graphics.copyFrom(myshape.graphics);之前,该形状没有碰撞区域。

因此,要解决这个问题,您必须在前面创建图形对象。变化可能类似于这样(在顶部):

代码语言:javascript
复制
var alreadyDrawn:Shape = new Shape();
alreadyDrawn.graphics.copyFrom(myshape.graphics);

这将提供一个在checkIt()中测试的碰撞区域。

我遇到的另一个问题是,touchTest上的一个命中框比符号的实际图像大很多倍。

对于此问题,您可以访问剪辑或其中的符号,并相对于alreadyDrawn形状的父形状获取其边界。然后,您可以使用两个形状的边界来测试碰撞。这将为您提供一个更精确的碰撞区域进行测试:

代码语言:javascript
复制
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
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26580898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档