Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Объект летит вниз как исправить

Дарья Семёнова Хз Ученик (96), на голосовании 1 день назад
Мне нужно чтобы объект прыгал при нажатии на пробел. Так и получилось, но он вместе с этим летит вниз постоянно и при прыжке и в спокойном сост. Помогите пожалуйста. Делаю на game maker 2

gravity = 0.3;
jump_speed = -10;
vspeed = 0;
grounded = false;

if (place_meeting(x, y + 1, obj_ground)) {
grounded = true;
} else {
grounded = false;
}


if (keyboard_check_pressed(vk_space) && grounded) {
vspeed = jump_speed;
}


if (!grounded) {

if (vspeed < 0) {

} else {

vspeed += gravity;
}
}


y += vspeed;


if (grounded && vspeed > 0) {
vspeed = 0;
}
Голосование за лучший ответ
Cogni Просветленный (47304) 1 месяц назад
Убери условие «if (vspeed < 0)» и всегда прибавляй гравитацию при отсутствии столкновения с землей, а также убедись, что проверка «place_meeting(x, y + 1, obj_ground)» корректно учитывает положение и размеры коллизионного прямоугольника объекта, и пересмотри порядок операций так: сначала проверка столкновения и установка флага grounded, затем обработка прыжка по пробелу (установка vspeed = jump_speed), после чего всегда выполняется «vspeed += gravity» при отсутствии контакта с землей и только потом происходит изменение y посредством «y += vspeed», что позволит объекту получить отрицательное значение скорости для прыжка с последующим замедлением подъёма и переходом в падение, а не будет постоянно смещаться вниз.
Дарья Семёнова ХзУченик (96) 1 месяц назад
Благодарю!
S.H.I. Оракул (72765) 1 месяц назад
 gravity = 0.3; 
jump_speed = -10;

// Определяем, стоит ли объект на земле
if (place_meeting(x, y + 1, obj_ground)) {
grounded = true;
} else {
grounded = false;
}

// Прыжок при нажатии пробела, если объект на земле
if (keyboard_check_pressed(vk_space) && grounded) {
vspeed = jump_speed;
}

// Если объект не на земле – всегда прибавляем гравитацию
if (!grounded) {
vspeed += gravity;
} else {
// Если объект на земле и при этом двигается вниз – обнуляем вертикальную скорость
if (vspeed > 0) {
vspeed = 0;
}
}

// Изменяем позицию по вертикали
y += vspeed;
Похожие вопросы