У меня возникли проблемы с получением столкновения gml на основе bbox. Мой горизонтальный в порядке. Это просто моя вертикаль - PullRequest
0 голосов
/ 18 марта 2019

Итак, изначально я установил bbox и sprite_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;
    }

Вот код, который не работает.Как видите, это то же самое, но для вас.Я не понимаю, как это может реагировать по-другому.Когда я спускаюсь и сталкиваюсь с 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;
}

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Это может быть одна из двух вещей:

  1. скорость не совместима со смещением например, если он перемещается на два пикселя и имеет скорость три, когда происходит коликиция, он перестает двигаться, потому что он выходит за пределы квадрата, я надеюсь, что вы достигнете этого, это случалось со мной много раз, прежде чем обнаружить, что это было скорость

  2. опорная точка или исходная точка могут быть перемещены, проверьте спрайт и убедитесь, что там, где указано исходное значение 0.0, по умолчанию или то же самое слева вверху, иногда мы перемещаемся по ошибке и не осознавая на данный момент я могу думать только об этих двух, потому что я не вижу ошибки в коде, что означает, что ошибка находится в другом разделе или другой стороне

если это поможет вам, мой ответ даст мне +1 XD

0 голосов
/ 19 марта 2019

Это игра сверху вниз или платформер? если это платформер, то vsp, скорее всего, будет иметь другую скорость из-за гравитации. Поэтому я думаю, что y = (_wall.bbox_bottom - 1) - sprite_bbox_top недостаточно эффективен в этом сценарии.

Может быть, это даже не нужно, потому что sign в операторе while должно уже правильно выровнять его по коллизии. Возможно, вы можете попробовать удалить / отключить второй оператор if и посмотреть, поможет ли это.

...