Ответ: Для начала, нужно понять, почему это происходит. Дело в том, что за один шаг пуля мгновенно перемещается на некоторое расстояние, хотя столкновение проверяется только в новой позиции - при большой скорости пуля может запросто "перескачить" стенку.
Как вариант, можно использовать такой код в step пули:
Код:
var i;
Code
for (i = sprite_width; i <= speed; i += sprite_width)
{
if place_meeting(x + lengthdir_x(i,direction), y + lengthdir_y(i,direction), o_wall) // Если в этой позиции есть стена, то...
{
x += lengthdir_x(i, direction); // Двигаемся к позиции столкновения
y += lengthdir_y(i, direction);
event_perform(ev_collision, o_wall); // Вызываем событие столкновения со стеной
}
}