0

我一直在广泛地寻找这个答案,但我没有找到我的问题的答案,因为我的对象不在数组中,而是在舞台上的影片剪辑中。我试图检测是哪个物体导致了碰撞,以便我使用这些物体来限制角色的移动。看看下面的图像,所有的灌木丛、房子和几十个其他物体都将被用作阻挡物体。

在此处输入图像描述

我找到了一种方法来检测与movieclips子对象的碰撞,但不是真正的对象正在发生这种碰撞。每次发生运动时,我都尝试循环遍历每个对象,并测试是否存在碰撞,但它从未记录任何命中。

这是我当前正在注册命中的代码。

        var background = bGround; // Make reference to the BG in the mainActions 
        var bgObjects = bGround.bgElements; 

        //trace(bgObjects.numChildren); 

        if(bgObjects.hitTestPoint(character.x,character.y,true)) { 
            trace("character: " + character.x + "," + character.y);
            trace("position of hit " + bgObjects.x + "," + bgObjects.y);
        }

这嵌套在一个事件监听器中,该监听器监视按键,因此它会重新测试每次按下按钮或每次用户移动角色时。我认为在命中测试发生后循环遍历对象是最好的主意,或者在每次移动期间循环遍历并特别测试该对象,但都无法正常工作。这是一种尝试。

for (var i : Number = 0; i < bgObjects.numChildren; i++) { 
                    var instBgElem = bgObjects.getChildAt(i); 

                    if(character.hitTestPoint(instBgElem.x, instBgElem.y, true)) { 

                        // Check X Left
                        if (character.x < bgObjects.getChildAt(i)).x { 
                                trace("hit left"); 
                        }
                        // Check X right 
                        if ( character.x > bgObjects.getChildAt(i)).x { 
                                trace("hit right"); 
                        }
                        // Check Y top 
                        if ( character.y < bgObjects.getChildAt(i)).y { 
                                trace("hit top"); 
                        }
                        // Check Y Bottom
                        if ( character.y > bgObjects.getChildAt(i)).y { 
                                trace("hit bottom"); 
                        }

                    }
                }

编辑:我能够让一段代码在一定程度上工作,但它实际上并没有测试背景对象上发生命中测试的位置。我可能需要找到每个对象的边界框并找出边界框的哪一侧被击中,在这里接受所有帮助。

for (var i : Number = 0; i < bgObjects.numChildren; i++) { 
                 var instBgElem = bgObjects.getChildAt(i);
                 if(instBgElem.hitTestPoint(character.x,character.y,true)){
                     if(instBgElem.x > character.x) { 
                       trace("right"); 
                     } else if(instBgElem.x < character.x) { 
                       trace("left"); 
                     }
                     if(instBgElem.y > character.y) { 
                       trace("up"); 
                     } else if(instBgElem.y < character.y) { 
                       trace("down"); 
                     }
                 }
            }

编辑 2:问题是找出命中测试与角色接触的位置,以便我可以限制该动作。我不知道该怎么做,我一直在尝试边界框。

var charBounding = character.getBounds(this); 

        trace("character bounding box" + charBounding); 
        trace("character bottom: " + charBounding.bottom);
        trace("character top:" + charBounding.top); 
        trace("character left:" + charBounding.left); 
        trace("character right:" + charBounding.right); 

每当角色移动时都会输出角色并更新它,不知道如何利用它来发挥我的优势。

字符边界框(x=85.95, y=79.05, w=72.2, h=72.2) 字符底部:151.25 字符顶部:79.05 字符左侧:85.95 字符右侧:158.15

4

0 回答 0