Вы можете добавить проверку к событию Create вашего возрождающегося объекта, который использует place_meeting(x,y,object_index)
, чтобы проверить, пересекается ли он с другим экземпляром того же типа объекта. Если это так, вы можете попробовать установить другую позицию.
Вы также можете сделать это в коде, который порождает ваши экземпляры, сначала создав экземпляр, а затем протестировав случайные места, пока не найдете подходящий:
newinst = instance_create(0,spawnY,object0);
with(newinst) {
var tries, done;
tries = 0;
done = false;
do {
tries += 1;
x = irandom(room_width);
done = !place_meeting(x,y,object_index);
} until(done or tries>50);
if(not done) {
// not enough space (or bad luck), bail out
instance_destroy();
}
}
Предел «попыток» предназначен для предотвращения попадания в бесконечный цикл, если свободного места нет. Этот метод неэффективен, если вы ожидаете, что будет занято больше всего места, и он может потерпеть неудачу, когда на самом деле еще есть место (также более вероятно, если уже есть много экземпляров, блокирующих путь), если это проблема, вам нужно сложная система. Однако, если вы ожидаете, что у ваших тварей обычно будет достаточно места для появления, этого должно быть достаточно.