Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML2] Skakanie w platformówce 2D

Ostatnio zmodyfikowano 2015-12-01 16:06
Autor Wiadomość
qest43
Temat założony przez niniejszego użytkownika
[SFML2] Skakanie w platformówce 2D
» 2015-11-30 18:57:39
Mam taki kod na skakanie postaci:

C/C++
if( statistic.onGround )
{
    statistic.currentJumpSpeed = statistic.jumpSpeed;
    statistic.currentFallSpeed = statistic.fallSpeed;
    statistic.currentJumpAmount = statistic.jumpAmount;
    statistic.ableToJump = true;
}

statistic.onGround = false;


if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) && statistic.ableToJump && !statistic.jumping ||
sf::Keyboard::isKeyPressed( sf::Keyboard::W ) && statistic.currentJumpAmount > 0 && statistic.currentJumpSpeed <= 0 )
{
    statistic.currentJumpSpeed = statistic.jumpSpeed;
   
    if( statistic.currentJumpAmount == statistic.jumpAmount && !statistic.falling )
    {
        statistic.currentFallSpeed = statistic.fallSpeed;
        statistic.jumping = true;
    }
    else if( statistic.currentJumpAmount != statistic.jumpAmount && statistic.currentJumpAmount > 0 )
    {
        statistic.currentFallSpeed = statistic.fallSpeed;
        statistic.jumping = true;
    }
   
    statistic.currentJumpAmount--;
}

if( !statistic.jumping )
     gravity();
else
     jump();


C/C++
void Entity::gravity()
{
    if( statistic.velocity.y == 0 )
         statistic.falling = true;
   
    if( statistic.falling )
    {
        statistic.currentFallSpeed += statistic.fallAcceleration;
       
        if( statistic.currentFallSpeed > statistic.maxFallSpeed )
             statistic.currentFallSpeed = statistic.maxFallSpeed;
       
        statistic.velocity.y += statistic.currentFallSpeed;
    }
}

void Entity::jump()
{
    statistic.currentJumpSpeed -= statistic.jumpAcceleration;
   
    if( statistic.currentJumpSpeed < 0 )
    {
        statistic.currentJumpSpeed = 0;
        statistic.falling = true;
        statistic.ableToJump = false;
        statistic.jumping = false;
    }
   
    statistic.velocity.y -= statistic.currentJumpSpeed;
   
    statistic.onGround = false;
}

C/C++
class Statistic
{
public:
    sf::Vector2f velocity, mousePosition, playerPosition;
    float moveSpeed;
    int jumpAmount, currentJumpAmount;
    float jumpSpeed, currentJumpSpeed, jumpAcceleration;
    float currentFallSpeed, maxFallSpeed, fallSpeed, fallAcceleration;
   
    bool falling, ableToJump, jumping, onGround;
    bool collision;
   
    int collisionDamage;
    float currentHitPoints, maxHitPoints;
    bool isDead;
   
    float fireProtection, poisonProtection;
   
    std::vector < std::shared_ptr < Bullet > > bullet;
};

Wydaje mi się on trochę zawiły, macie jakieś rady jak to lepiej rozwiązać?
P-141185
DejaVu
» 2015-12-01 16:06:19
Jeżeli działa to jest ok. Rozważanie przez osoby trzecie czy da się coś napisać lepiej nie ma większego sensu.
P-141228
« 1 »
  Strona 1 z 1