C ++, Jumping Sprite, столкновение

Я пытаюсь реализовать очень простое поведение платформы / спрайта с использованием C ++.

До сих пор я успешно рендерил 2 платформы и спрайт, который может двигаться и прыгать. Ниже приведен фрагмент кода, который имитирует прыжок и гравитацию.

Если я закомментирую строки 2,3, & 6 из фрагмента, прокомментированного «// Гравитация», я не могу прыгнуть через платформу из-под идеально, но я не могу приземлиться на него … Если я оставлю их, как они ниже, (Использование check_collision функция), я могу успешно прыгать вверх и на платформу и двигаться по ней влево и вправо. К сожалению, если я нажму прыгать снова (key119), Я проваливаюсь сквозь платформу и иногда даже прикалываюсь к ней, а не делаю еще один прыжок.

Что я забыл реализовать, чтобы спрайт мог совершить еще один прыжок?

    if(keyDown[119]){                                               //While 'w' key is pressed and not colliding
if(!check_collision(sprite,platform)                        //If not colliding...
&& !check_collision(sprite,platform2)){
y_Pos += jumpHeight;                                    //Jump up
if(keyDown[97] ){x_Pos -= velocity*jumpLength;}         //While 'w' and 'a' are pressed, simulate arc of jump/gravity
if(keyDown[100]){x_Pos += velocity*jumpLength;}         //While 'w' and 'd' are pressed, simulate arc of jump/gravity
}
else                                                        //Else you must be colliding, bounce off
y_Pos -= jumpHeight;
}
if(keyDown[115]){y_Pos -= velocity;}                            //While 's' key is pressed
if(keyDown[97] ){x_Pos -= velocity;}                            //While 'a' key is pressed
if(keyDown[100]){x_Pos += velocity;}                            //While 'd' key is pressed

//gravity
if(y_Pos>0){                                                    //If above ground
if(!check_collision(sprite,platform)                        //And not colliding
&& !check_collision(sprite,platform2)){
gravity-=5*delta;                                       //Calculate gravity force
y_Pos+=gravity;                                         //Descend to ground
}
if(keyDown[97] ){x_Pos -= velocity*2;}                      //While off ground, whilst 'a' is pressed, move left
if(keyDown[100]){x_Pos += velocity*2;}                      //While off ground, whilst 'd' is pressed, move right
}
else{gravity=0;}                                                //Else, on ground, so gravity force is zero

Пожалуйста, извините мою наивность и будьте терпеливы, я самоучка, и мы все должны с чего-то начать. Благодарю.

Слишком много кода для публикации всей программы, но если вам интересно, полный исходный код можно найти Вот

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector