【问题标题】:I'm having trouble getting bbox based gml collisions to work. My horizontal one is fine. Its just my vertical我无法让基于 bbox 的 gml 冲突正常工作。我的横版没问题。它只是我的垂直
【发布时间】:2019-08-08 11:18:51
【问题描述】:

所以最初我设置了bboxsprite_index 的东西(我知道你应该使用蒙版,但我还没有制作动画,所以我暂时保持简单)。

var sprite_bbox_top = sprite_get_bbox_top(sprite_index) - sprite_get_yoffset(sprite_index);
var sprite_bbox_right = sprite_get_bbox_right(sprite_index) - sprite_get_xoffset(sprite_index);
var sprite_bbox_left = sprite_get_bbox_left(sprite_index) - sprite_get_xoffset(sprite_index);
var sprite_bbox_bottom = sprite_get_bbox_bottom(sprite_index) - sprite_get_yoffset(sprite_index);

所以下面是 hsp 代码。这工作得很好。

   if (place_meeting(x + hsp, y, argument0)) {
        while (!place_meeting(x + sign(hsp), y, argument0)) {
            x += sign(hsp);
        }
        _wall = instance_place(x + sign(hsp), y, argument0);
        if (hsp > 0) {
            x = (_wall.bbox_left - 1) - sprite_bbox_right;
        }
        else {
            x = (_wall.bbox_right + 1) - sprite_bbox_left;
        }
        hsp = 0;
    }

这是无效的代码。如您所见,这是相同的,但对于 y。我不明白它怎么会有不同的反应。当我下降并与argument0 碰撞时,对象快速向右移动(位置 x)。当我向上碰撞时,它就完全消失了。

if (place_meeting(x, y + vsp, argument0)) {
    while (!place_meeting(x, y + sign(vsp), argument0)) {
        y += sign(vsp);
    }
    _wall = instance_place(x, y + sign(vsp), argument0);
    if (vsp > 0) {
        y = (_wall.bbox_bottom - 1) - sprite_bbox_top;
    }
    else {
        y = (_wall.bbox_top + 1) - sprite_bbox_bottom;
    } 
    vsp = 0;
}

【问题讨论】:

    标签: game-maker gml game-maker-language game-maker-studio-2


    【解决方案1】:

    它可以是以下两种情况之一:

    1. 速度与位移不兼容 例如,如果它移动到两个像素并且速度为 3,当有一个 colicion 时它会停止移动,因为它会不规则,我希望你能做到这一点,在我发现它之前发生了很多次速度

    2. 锚点或原点可能被移动,检查精灵并确保它所说的原点默认为0.0或左上角相同,有时我们会错误地移动而没有意识到 目前我只能想到这两个,因为我在代码中没有看到错误,这意味着错误在另一部分或另一边

    如果我的回答对你有帮助,请给我 +1 XD

    【讨论】:

    • 抱歉,我的声望低于 15,所以我的 +1 没有任何作用。想让您知道您确实提供了帮助。
    【解决方案2】:

    这是一款自上而下的游戏还是平台游戏?如果它是一个平台游戏,那么vsp 可能会因为重力而具有不同的速度。所以我认为y = (_wall.bbox_bottom - 1) - sprite_bbox_top 在这种情况下不够有效。

    也许它甚至不需要,因为 while 语句中的 sign 应该已经正确地将它与碰撞对齐。也许您可以尝试删除/禁用第二个 if 语句,看看是否有帮助。

    【讨论】:

    • 它不是平台游戏。自上而下,鸟瞰图。
    猜你喜欢
    • 2014-08-26
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多