Я немного поиграл с проектом, я понимаю ошибку, которую вы получаете, после того, как персонаж проходит через первую дверь, он не может вернуться, хотя в r_sworld есть двери того же типа, у них всех есть столкновениемаски, все они имеют переменные ... Я не знаю, почему ваш код не работал, но я нашел решение!
Переместите код из o_player :: o_door в o_player :: step.
Использование событий столкновения в GMS, как правило, не рекомендуется, вы должны стараться делать как можно больше в шаговом событии.Вы можете заменить событие столкновения на o_door, добавив его в конце события шага:
if (place_meeting(x, y, o_door)) {
var door = instance_place(x, y, o_door);
room_goto(door.room_);
global.player_start_position = door.start_;
persistent = true;
}
Вот подвох.Если из-за новой позиции, продиктованной global.player_start_position
, игрок появляется на вершине какой-то другой двери в комнате назначения, вы немедленно будете телепортированы обратно в первую комнату.Убедитесь, что координаты в door.start_
никогда не находятся слишком близко к другим дверям.
Надеюсь, это поможет!