Коллизии Game Maker работают только иногда

Это мой код для врагов в моей игре

//Collision
if (place_meeting(x,y,Object_Wall))
{
    speed = 0
    direction = point_direction(x,y,Object_Wall.x,Object_Wall.y) + random_range(160,200)
    speed = sp / 2
    time = random_range(room_speed * 0.75,room_speed * 3)
}

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

Я использую Object_Wall как родительский объект, и они работают с ним, но проблема возникает с его дочерними элементами.


person Xain R    schedule 09.04.2016    source источник


Ответы (1)


Когда вы используете point_direction(x,y,Object_Wall.x,Object_Wall.y), это не объект, который был найден с помощью place_meeting(x,y,Object_Wall).

place_meeting(x,y,Object_Wall) проверит коллизию со всеми экземплярами объекта Object_Wall. Но когда вы используете в point_direction идентификатор объекта вместо идентификатора экземпляра, GM возьмет первый (в порядке создания) экземпляр объекта Object_Wall.

Вы можете взять идентификатор экземпляра, используя, например, функцию collision_circle. Но я рекомендую использовать внутри него событие Collision и ключевое слово other.

person Dmi7ry    schedule 10.04.2016
comment
Итак, когда она сталкивается, я могу использовать with(other), чтобы получить координаты стены, а затем использовать их, чтобы уйти от нее? - person Xain R; 14.04.2016
comment
Если объект стены не помечен как Solid, вы можете сделать, например, x=xprevious; y=yprevious;, а затем изменить направление direction = point_direction(x, y, other.x, other.y) + random_range(160,200); - person Dmi7ry; 15.04.2016