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