Вот мой код столкновения. (Я получил его от FriendlyCosmonaut, но добавил отладочное сообщение для собственной выгоды):
// COLLISION CHECK
//Horizontal
if (place_meeting(x+moveX,y,obj_solid)){
repeat(abs(moveX)){
if(!place\_meeting(x+sign(moveX),y,obj\_solid)){
x = x + sign(moveX);
} else {
break;
}
}
moveX = 0;
show_debug_message("collision");
}
//Vertical
if (place_meeting(x,y+moveY,obj_solid)){
repeat(abs(moveY)){
if(!place\_meeting(x,y+sign(moveY),obj\_solid)) {
y = y + sign(moveY);
} else {
break;
}
}
moveY = 0;
show_debug_message("collision");
}
см. рисунок, красная рамка является частью спрайта для ясности
игра допускает перекрытие в 32 пикселя, прежде чем фактически установить для moveY значение 0; маска столкновения начинается на 16 пикселей ниже верхней части спрайта. (исходная точка установлена в верхнем левом углу, что находится за пределами диапазона маски столкновения.) Затем он ловит меня там, и я не могу двигаться ни в каком направлении. и выходные данные отладки регистрируются как 100 столкновений...
основываясь на документации yoyo, я думал, что place_meeting
предназначен только для взаимно точных масок, которые, по общему признанию, я здесь не использую, но код не будет работать, даже если я это сделаю (хотя, вероятно, даст другие координаты и вывод - я не проверял все сценарии).
Я действительно понятия не имею, почему это не работает, и пробовал другие коды с тем же эффектом. это то, что я выбрал в качестве отправной точки для устранения неполадок, и я ценю любую помощь, которую я могу получить! пожалуйста, не приходите за мной, потому что я не предоставил все необходимые детали или что-то не понял. Я новичок, и я здесь, чтобы учиться. :)
Обновление: по-видимому, столкновение происходит с другими типами масок столкновений (например, точными и алмазными). Но это не создает тот вид, который мне нужен — это действительно должен быть прямоугольник, созданный вручную.
place_meeting
иobj_solid
стоят\
? Я не уверен, было ли это намеренно - person Steven   schedule 19.02.2021