Flüssige Bewegungen -wie geht das?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Du darfst keine 5er bewegungen machen, sondern immer nur 1er schritte, dann läuft es flüssiger.
Mit scratch programmieren isg aber generell nicht so gut.

Was hast Du gegen Scratch?

2
Mit scratch programmieren isg aber generell nicht so gut.

Warum?

0

Wieso ist programmieren auf Scratch nicht so gut?

0

Versuche die Figur langsam zu beschleunigen. Hier mal ein Beispiel im C++-Code mit SFML:
PS: Hab die Kommentare mal auf deutsch umgeschreiben :D

Achso: Natürlich musst du mit den Werten herumspielen und "a" und "v" sind 2-Dimensionale Vektoren

/*

W / Hoch (Pfeiltaste) - nach vorne
S / Runter (Pfeiltaste) - nach hinten
A / Links (Pfeiltaste) - nach links
D / Rechts (Pfeiltaste) - nach rechts

*/

const float accel = 0.03f;

// Um den Schwierigkeitsgrad zu erhöhen,
// kann der Spieler nur in eine Richtung fliegen; er kann also maximal
// nur eine Taste drücken.

// Tastenabfrage
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A) ||
sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
a.x = -accel;

// Raumschiff drehen
mSprite.setRotation(-180.f);
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::D) ||
sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
{
a.x = accel;

// Raumschiff drehen
mSprite.setRotation(0.f);
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) ||
sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
a.y = -accel;

// Raumschiff drehen
mSprite.setRotation(-90.f);
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::S) ||
sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
{
a.y = accel;

// Raumschiff drehen
mSprite.setRotation(90.f);
}
else
{
// bis jetzt würde das Schiff einfach weiter gleiten, deshalb muss die Geschwindigkeit in jedem Frame reduziert werden.
float k = 0.97;
v.x *= k;
v.y *= k;
}

// Beschleunigung ist die Änderung der Geschwindigkeit
v.x = v.x + (a.x * dT.asSeconds());
v.y = v.y + (a.y * dT.asSeconds());

// Außerdem sollte man noch eine Maximalgeschwindigkeit festlegen,
// da die Geschwindigkeit sonst zu groß werden kann.
const float maxvel = 100;
if (v.x > maxvel)
{
v.x = maxvel;
}
if (v.x < -maxvel)
{
v.x = -maxvel;
}

// Sprite bewegen
mSprite.move(v.x, v.y);

dT.Zero;// Zeit zurücksetzten
a.x = 0; // Beschleunigung auf NULL setzen
a.y = 0; // Beschleunigung auf NULL setzen

Hat sich schon erledigt, war da nur noch ein Anfänger :)

Könnt ja mal mein neues Projekt anschauen: Timefrozer 2

Um so kleiner die Anzahl an Schritten die du machst um so flüssiger ist es.

 - (Programmieren, Figur, Bewegung)

Mach den Sprung mit einer Variablen
Und mach dann z.B. wenn du 50 hochspringen möchtest 5 mal 10 nachoben und dann immer zwischen den einzelnen Schritten 0,01 Sekunde Wartezeit

Was möchtest Du wissen?