2011-01-05 31 views
0

Ich zerreiße meine Haare über diese. Aus irgendeinem seltsamen Grund kann ich nicht herausfinden, wie man ein Sprite in SFML und/oder SDL bewegt. Die Tutorials, die ich für beide Bibliotheken gelesen habe, sagen nichts darüber aus; also nehme ich an, dass es eher eine C++ - Sache als eine Bibliothekssache ist.Sprite Bewegung

Also ich frage mich; Wie verschiebst du ein Sprite?

(wenn ich mich bewege sage, meine ich über das Fenster mit einer eingestellten Geschwindigkeit auf das Sprite „gleiten“ haben)

Antwort

1

Sie benötigen eine Schleife, die eine feste Anzahl von Mal pro Sekunde aufgerufen wird, dann aktualisieren Sie die x , y-Werte des Sprites für jeden Frame.

Für SFML haben Sie sprite.move

while (App.IsOpened()) 
{ 
    // Process events 
    sf::Event Event; 
    while (App.GetEvent(Event)) 
    { 
     if (Event.Type == sf::Event::Closed) 
      App.Close(); 
    } 

    // Get elapsed time 
    float ElapsedTime = App.GetFrameTime(); 

    // Move the sprite 
    if (App.GetInput().IsKeyDown(sf::Key::Left)) Sprite.Move(-100 * ElapsedTime, 0); 
    if (App.GetInput().IsKeyDown(sf::Key::Right)) Sprite.Move(100 * ElapsedTime, 0); 
    if (App.GetInput().IsKeyDown(sf::Key::Up)) Sprite.Move(0, -100 * ElapsedTime); 
    if (App.GetInput().IsKeyDown(sf::Key::Down)) Sprite.Move(0, 100 * ElapsedTime); 
} 
+0

Vielen Dank! – Lemmons

0

Meine Lieblings Weg, dies zu tun, ist eine wiederkehrende Timer SDL_AddTimer mit einer Callback-Funktion einzurichten, die Beiträge ein benutzerdefiniertes Ereignis in der Ereignis-Warteschlange alle 20 Millisekunden. Immer wenn deine Ereignisschleife auf dieses Ereignis trifft, aktualisiere die Sprite-Position und zeichne diesen Abschnitt des Bildschirms neu (zeichne den Hintergrund darüber, wo das Sprite war und zeichne das Sprite an seine neue Position).

Das Schöne daran ist, dass die interne Darstellung des Sprites auch dann noch regelmäßig abläuft, wenn Sie beim Aktualisieren des Bildschirms kurzzeitig ins Hintertreffen geraten. Dies ist wichtig, wenn Sie eine Kollisionserkennung durchführen, bei der das Sprite plötzlich auf halbem Weg über den Bildschirm springt und es durch eine Wand laufen lassen könnte, die es blockieren sollte.

+0

Ich würde immer noch den Unterschied zwischen den Frames, da 20 Millisekunden in keiner Weise garantiert ist. – Lalaland