Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

09.02.2013, 20:54

SFML 2.0 Flüssige Steuerung

#include <SFML\Graphics.hpp>
#include <SFML\Audio.hpp>
#include <iostream>

int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
window.EnableVerticalSync(true);
sf::Event Event;
sf::Mouse Mouse;
sf::Keyboard Keyboard;

sf::Texture texture;
if (!texture.LoadFromFile("Textures/Mario/Mario_Default_Right.png"))
{
std::cout<<"[FAIL] Load Mario_Default_Right Texture"<< std::endl;
}else
{
std::cout<<"[SUCCED] Load Mario_Default_Right Texture"<< std::endl;
}
sf::Sprite player_Mario;
player_Mario.SetTexture(texture);


while(window.IsOpened())
{
while(window.PollEvent(Event))
{
if(Event.Type == Event.KeyPressed && Event.Key.Code == Keyboard.Escape)
{
window.Close();
}

if(Event.Type == Event.KeyPressed && Event.Key.Code == Keyboard.A)
{
player_Mario.Move(-0.1f * window.GetFrameTime(), 0);
}

if(Event.Type == Event.KeyPressed && Event.Key.Code == Keyboard.D)
{
player_Mario.Move(0.1f * window.GetFrameTime(), 0);
}
}
window.Clear();
window.Draw(player_Mario);
window.Display();
}
}





So ist die Steuerung des Sprites sehr miserabel(Dauert einige Zeit bis sich der Sprite im selben tempo bewegt, ist ziemlich ruckelig,
Wenn ich in der Move Funktion den abstand geringer mache, ist das Sprite Ultra Langsam -> Dafür aber nicht ruckelig)

Wie kann ich die Steuerung verbessern ?

PS: Für den Smiley oben kann ich nichts :D

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

09.02.2013, 21:08

Statt KeyPressed, solltest Du KeyDown und KeyUp verwenden, bzw. sf::Keyboard::isKeyPressed.
KeyPressed ist quasi das, was passiert, wenn Du in einem Eingabefeld eine Taste gedrückt hältst. Erst kommt ein Buchstabe, dann kurz Pause und dann ganz viele, aber deutlich weniger als 60 pro Sekunde.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

09.02.2013, 21:38

KeyDown und KeyUp exestieren leider nicht...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

09.02.2013, 21:48

Da steht ja zum Glück noch mehr.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

09.02.2013, 22:32

Ich habe es so gemacht ich habe eine variable

C-/C++-Quelltext

1
bool Move[4] // 1 = up usw..
diese wurden alle auf false gesetzt diese habe ich dann in der keydown und keyup abfrage auf false und true setzen lassen und ich hatte eine funktion "Move" in der Render schleife drinne so das immer mit 60fps bewegt wurde aber jedesmal abgefragt wurde wenn du dir das mal anschauen möchtest hier mein ganzen Projekt bitte keine der Bilder für Kommerziele Zwecke nutzen die sind alle selbst gemacht und hat ziemlich lange gedauert ;)


http://www.file-upload.net/download-7185…hooter.rar.html

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Farmär« (09.02.2013, 23:13)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

09.02.2013, 22:56

Farmär, das nächste Mal entfern aus dem Archiv bitte die Dateien mit den Endungen ilk, pdb, ipch, sowie den Ordner Debug mit den temporären Build-Dateien. Außerdem ist der Ordner doppelt vorhanden, sowie Dein "Data"-Ordner. Ich schätze mal die *.sdf braucht das Spiel ebenfalls nicht. Damit wäre das Archiv statt 18Mb vielleicht noch 2Mb groß gewesen.
Das spart massiv Speicher, gerade bei so einem langsamen Hoster durchaus sinnvoll.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

7

09.02.2013, 23:00

Farmär, das nächste Mal entfern aus dem Archiv bitte die Dateien mit den Endungen ilk, pdb, ipch, sowie den Ordner Debug mit den temporären Build-Dateien. Außerdem ist der Ordner doppelt vorhanden, sowie Dein "Data"-Ordner.
Das spart massiv Speicher, gerade bei so einem langsamen Hoster durchaus sinnvoll.
Ich weis wie du sicher bemerkt hast, passt der Name des Projektes nicht wirklich zum Spiel ;) dieser Ordner und so war einfach auf die schnelle hingebastelt hatte jetzt keine lust da viel rumzu säubern. :)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

09.02.2013, 23:01

Joar, dann lädt man halt 5 Minuten lang 18Mb runter statt in 30 Sekunden 2Mb...

Mal davon abgesehen sind Irrlicht und SFML ganz verschiedene Engines.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

9

09.02.2013, 23:12

Joar, dann lädt man halt 5 Minuten lang 18Mb runter statt in 30 Sekunden 2Mb...

Mal davon abgesehen sind Irrlicht und SFML ganz verschiedene Engines.
Wer hat hier was von Irrlicht gesagt? Oder steht da was in meinen Dateien von? Tut mir leid falls schon dieser ordner ist nämlich nicht mein Projektordner sondern nur sowas wie eine sicherheitskopie die ich vor ein paar monaten angelegt habe ;)

10

09.02.2013, 23:14

Habe den Link jetzt verändert und den Ordner sauber gemacht jetzt sollte alles klar sein und ich konnte durch löschen der ilk und pdb files usw nur 2mb rausholen ;)

Werbeanzeige