【问题标题】:hitTest check of a movie clip without checking its parenthitTest 检查影片剪辑而不检查其父级
【发布时间】:2014-05-01 09:58:13
【问题描述】:

我要做的是检查一个名为enemy 的影片剪辑实例与一个名为laser 的影片剪辑实例(它位于一个名为ship 的影片剪辑中)的碰撞。

当敌人与船相撞时,我希望主时间线转到第 2 帧。

当敌人与激光相撞时,我希望主时间线转到第 3 帧。

问题是当 ship.laser 与敌人相撞时,它也算作船在与敌人相撞。

有没有办法在不同时检查船和敌人的情况下检查ship.laser和敌人的碰撞?

addEventListener(Event.ENTER_FRAME, collide);
function collide(event:Event)
{
    if (enemy.hitTestObject(ship) )
    {
        gotoAndStop(2);
        trace("hit Ship");

    }

    if (enemy.hitTestObject(ship.laser))
    {
        trace("hit laser");
        gotoAndStop(3);

    }
}

【问题讨论】:

    标签: actionscript-3 flash


    【解决方案1】:

    如果敌人与激光相撞,它也会与船相撞,这是正常的,因为激光是船的一部分。

    你可以做的只是检查敌人是否与激光相撞:

    if (enemy.hitTestObject(ship) )
    {
        if (enemy.hitTestObject(ship.laser))
        {
            // collides with ship AND laser
        } else {
            // collides with ship only, but not with the laser
        }
    }
    

    【讨论】:

    • 与激光的碰撞现在工作正常,但是当船与敌人碰撞时我得到了这个错误 TypeError: Error #2007: Parameter hitTestObject must be non-null.在 flash.display::DisplayObject/_hitTest() 在 flash.display::DisplayObject/hitTestObject() 在 MethodInfo-9()
    • 嗯,您提供的属性之一似乎为空 - 敌人、船或 ship.laser。努力吧,魔棒我帮不了你!
    • 我想我知道为什么它给了我一个空错误。激光影片剪辑仅在激光发射时出现几秒钟,但在发射动画结束后消失。仅当它在舞台上时,我如何才能检查它的碰撞?这样不在舞台上时不会有hitTest
    • 只需添加检查激光是否存在:if (ship.laser && enemy.hitTestObject(ship.laser))...先做一些研究:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 2020-09-17
    • 2020-10-28
    • 1970-01-01
    相关资源
    最近更新 更多