0

所以最初我设置了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物体碰撞时,它会快速向右移动(pos 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;
}
4

2 回答 2

2

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

  1. 速度与位移不兼容例如,如果它移动到两个像素并且速度为三,当有一个colicion时它会停止移动,因为它会不方形,我希望你能做到这一点,它发生在我身上很多次才发现是速度

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

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

于 2019-03-22T21:12:54.793 回答
0

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

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

于 2019-03-19T07:35:57.443 回答