多个HitTestObject ActionScript 3.0

时间:2012-11-05 20:30:13

标签: actionscript-3 hittest

我一直在开发AS3中的视频游戏。我有一个数组来绘制一个包含道路,火,终点门等的​​游戏区域。然后,我添加一个由玩家通过鼠标控制的MovieClip,并尝试检查与道路MovieClip的碰撞。

但是,我不工作......它永远不会跟踪“IN”。我在代码中找不到任何错误 - 但你永远不确定...... 你能帮忙解决这个问题吗?

谢谢你们!

以下是代码:

 Declarations:
    public class  Player extends MovieClip
    {
        public var player:MovieClip;
        public var road:MovieClip;
        public var finish:MovieClip;
        public var fire:MovieClip;
        public var sting:MovieClip;

        public var map:Array = new Array();

数组初始化:

/* 1 ROAD
         * 2 FINISH
         * 3 FIRE
         * 4 STRING
         */

        public function Player():void
        {
            map = [ [ 1, 1, 3, 3, 3, 3, 3, 3, 1, 1 ],
                    [ 1, 1, 3, 4, 4, 4, 4, 3, 1, 1 ],
                    [ 1, 1, 3, 4, 4, 4, 4, 3, 1, 1 ],
                    [ 1, 1, 3, 3, 3, 3, 3, 3, 1, 1 ],
                    [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 ],
                    [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 ],
                    [ 1, 1, 3, 3, 3, 3, 3, 3, 1, 1 ],
                    [ 1, 1, 3, 4, 4, 4, 4, 3, 1, 1 ],
                    [ 1, 1, 3, 4, 4, 4, 4, 3, 1, 1 ],
                    [ 1, 1, 3, 3, 3, 3, 3, 3, 1, 1 ]
                  ];
            // 10 x 10 array

添加hitTest功能:

addEventListener(  Event.ENTER_FRAME, playerHitTest );

和hitTest功能:

public function playerHitTest( e:Event ):void
{
    if ( player.hitTestObject( road ) )
    {

        trace("IN");
    }
}

PS:如果我创造条件!player.hitTestObject( road ),它总是跟踪“IN”。

再次感谢!

1 个答案:

答案 0 :(得分:2)

这里没有足够的代码可以确切地看到发生了什么,但显然hitTest会因为你只检查一个道路对象而失败,但根据你的地图数组,应该有很多道路对象。

您需要一个数组来存储道路对象:

var roadArray:Array = [];

无论您在何处创建道路对象,您都应该将它们插入到此数组中:

roadArray.push(road);

然后当你执行hitTest时,你必须遍历整个数组并检查每个道路对象是否发生碰撞:

public function playerHitTest( e:Event ):void
{
    for each(var road in roadArray)
    {
        if ( player.hitTestObject( road ) )
        {    
            trace("IN");
        }
    }
}