2016-11-13 4 views
-3

Я попытаюсь объяснить просто, мой персонаж прыгает, но он не падает, когда освобождается кнопка «Коснитесь». Как это исправить?C++ SDL Player не падает, когда прыжки

Вот мой код для прыжка:

if (keystate[keys[7]]) //Keys 7 = SPACE Button 
{ 
    jumping = true; 
} 
if (jumping) //If is jumping 
{ 
    positionRect.y += jumpVel; 
    jumpVel -= gravity; 
    maxjumpheight++; 
} 

if (maxjumpheight >= 40) 
{ 
    positionRect.y += maxjumpheight * delta; 

    std::cout << "maxjumpheight: " << maxjumpheight << std::endl; 
    jumping = false; 
    if (maxjumpheight == 40) 
    { 
     maxjumpheight == 0; 
    } 
} 

Here является весь источник файла по Player.cpp!

+1

', если (maxjumpheight == 40) { maxjumpheight == 0; } 'не будет часто. –

+1

Можете ли вы объяснить лучше? Я просто хочу сделать это простым: Когда игрок прыгает в перебежку ++; , поэтому, если высота прыжка равна 40, его необходимо снова вернуть к нулю. – BalioFVFX

+0

@BalioFVFX Я предполагаю, что вы хотели использовать назначение ('='), а не сравнивать значения и отбрасывать результат. – keltar

ответ

0

Обычный способ справиться с этим - дать игроку импульс скорости в направлении y и с некоторой физикой. Если jumpVel является скорость в направлении оси у, она будет выглядеть следующим образом (я добавлю в некоторых стилистических советы, а):

if (keystate[keys[7]]) //Keys 7 = SPACE Button 
{ 
    jumping = true; 

    // unnecessary to set jumping to true and just check it directly afterwards. Just add it here instead 

    jumpVel = 1.0; // Set this to some value, this is the impulse you give the player when he jumps 
} 

// Okay, time to update the position. Lets limit the player so he can't go below 0 
if (positionRect.y > 0) { 
    positionRect.y += jumpVel * delta; // This is how you calculate the new position given speed and change in time 
} 

// gravity affects the speed with which we fall 
jumpVel -= 9.8 * delta; 

нравится! Теперь реализация выше позволяет игроку летать, если вы держите пробел, но если вы его отпустите, вы должны увидеть, как парень падает. Я оставлю его в качестве упражнения, если вы хотите, чтобы ограничить максимальную высоту :)

EDIT: Ваша ось у перевернута, так что мы должны изменить это соответственно:

if (keystate[keys[7]]) //Keys 7 = SPACE Button 
{ 
    jumping = true; 
    jumpVel = 1.0; 
} 

// the character is above the bottom of the screen 
if (positionRect.y > 480) { 
    positionRect.y -= jumpVel * delta; 
    //  note:^we just flip the axis 
} 
jumpVel -= 9.8 * delta; 

edit2: Хорошо , позволяет пропустить физику на данный момент. Самый простой способ реализовать поведение, которое вы хотите это

if (positionRect.y > 0 && positionRect.y < 480) { 
    // We are inside the screen bounds 
    if (keystate[keys[7]]) { 
     positionRect.y -= 1.0; // jump 
    } else { 
     positionRect.y += 1.0; // fall 
    } 
} 

Удалите jumping/falling/maxjumpheight флаги.

EDIT3: Ах, конечно. Позволяет изменить его еще раз.

if (keystate[keys[7]]) { 
    if (positionRect.y > 0) positionRect.y -= 1.0; // jump if below the top 
} else { 
    if (positionRect.y < 480) positionRect.x += 1.0; // fall if above the bottom 
} 
+0

Хорошо, ребята, спасибо всем за помощь, которую я ценю! Теперь он просто ушел, когда кнопка «Пробел» выпущена, персонаж должен упасть. Всякий раз, когда я пытаюсь что-то сделать, он сразу начинает падать сразу, даже не прикасаясь к чему-либо с клавиатуры, падая. Поэтому я решил сделать чек, если высота прыжка выше 35 - начните падать. Но это не делает правильный путь. Пока вот мой код: http://pastebin.com/4qvuQjHY – BalioFVFX

+0

@BalioFVFX Мой код касается этой проблемы. Если 'jumpVel> 0' вы прыгаете, а если' jumpVel <0', вы падаете. Ваши флажки 'прыжки' и' падения' не нужны. – pingul

+0

Когда я пытаюсь использовать ваш код, мои персонажи будут отображаться на экране, когда они попадут в координату 0, которая находится в верхней части экрана: \ – BalioFVFX

0

Если вы хотите, чтобы персонаж прекратил прыгать при отпускании. Добавьте else в первый оператор if с jumping = false.

+0

Благодарим вас за помощь. У вас есть идея, как заставить его упасть, когда ключ выпущен? Вот код до сих пор: http://pastebin.com/jwKfLQ9H – BalioFVFX

Смежные вопросы