Grawitacja i skakanie w platformówce

0

Napisałem skakanie i kolizję w ten sposób:

        velocity.x = velocity.y = 0;
	jumpIsActive = false;

	if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
	{
		velocity.x += moveSpeed;
	}
	else if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
	{
		velocity.x -= moveSpeed;
	}
	if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))
	{
		if(ableToJump)
		{
			currentAcceleration.y += jumpAcceleration.y;
			velocity.y += currentAcceleration.y;

			inAir = true;
			onGround = false;
			jumpIsActive = true;

			if(currentAcceleration.y < maxAcceleration.y)
			{	
				currentAcceleration.y = 0;
				jumpIsActive = false;
				ableToJump = false;
			}
		}
	}

	if(!jumpIsActive)
	velocity.y += acceleration.y;

Gdy spadnie na kafel ustawiane sa takie parametry:

    onGround = true;
    inAir = false;
    jumpIsActive = true;
    ableToJump = true;

Podstawowe ustawienia zmiennych są takie:

       jumpAcceleration.y = -100;
       jumpAcceleration.x = 0;
       currentAcceleration.x = 0;
       currentAcceleration.y = 0;
       maxAcceleration.x = 0;
       maxAcceleration.y = -900;

Wszystko działa bardzo nierealistycznie, jakbyście to poprawili?
chciałbym stworzyć coś co działa realistycznie, i elastycznie by można było zrobić np. double jump.

0

Wykorzystaj gotowy silnik do fizyki, np. Box2D.

0

Nie przepadam za takimi rozwiązaniami.

0

Zatem na przykład to powinno Ci pomóc:
http://www.fizykon.org/kinematyka/rzuty_rzut_ukosny.htm

0

Wszystko działa bardzo nierealistycznie, jakbyście to poprawili?

  1. licz na liczbach rzeczywistych
  2. używaj wartości w prawdziwych jednostkach (metr, kilogram, metr na sekundę itp.) i przeliczaj na współrzędne ekranu tylko celem wyświetlania.
  3. stosuj wzory fizyczne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1