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

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

1

04.06.2012, 14:26

SFMl 1.6 - Spielername eingeben

Hey liebe Forengemeinde,
erneut muss ich euch mit einem Problem nerven :whistling:

Diesmal gehts darum das der Spieler seinen Namen eingibt.
Das hab ich schon hinbekommen.

Mein Problem liegt eher darin das wenn ich 1x eine Taste drücke ungefähr 3-4mal der Buchstab drangehängt wird.

Hier mal der Code mit der Eingabe:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
    if(TypeIn == false)
     {
      // Handle ASCII Buchstaben
      if (EventHandler->Text.Unicode < 128)
      {
          *stdPlayerName += static_cast<char>(EventHandler->Text.Unicode);
          PlayerNameEingabe->SetText(*stdPlayerName);

          TypeIn = true;
          TimeHandler->Reset();
      }
     }


Um diesem Fehlverhalten gegenzuwirken habe ich schon eine bool-Variable eingebaut die dieses
Phänomen eigentlich unterbinden soll, allerdings wird bei 1x tastendruck 4x der Buchstabe drangehängt nur halt
mit dieser Timer Pause...

Wie realisiert ihr denn die Eingabe des Spielernamens?

MfG Marcel
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

2

04.06.2012, 14:59

Du kannst nach jedem Tastendruck sf::Sleep() (oder wie es sonst auch geschrieben wird...) benutzen, z.B. mit dem Wert 200.

Mfg
C++-Coder

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

3

04.06.2012, 15:31

Wie ich schon gesagt habe benutze ich eine bool variable
zum pausieren ob nun mit sleep oder mitnem timer gesteuerten boolwert :D
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

4

04.06.2012, 17:03

ich bin mir nicht sicher, was sf:: sleep() macht (vermutlich wird der gesamte Thread pausiert), allerdings halte ich dies für eine schlechte Idee

(ich gehe einfach mal davon aus, dass man die Buchstaben auf seiner Tastatur eingeben darf)
da ich mich mit SFML selbst nicht auskenne: kann man mit SFML Tastaturevents behandeln oder sich den aktuellen Zustand der Tasten besorgen? (oder beides?)
was hast du für deine Lösung verwendet?

wenn Events verwendet werden können, hast du ggf. das falsche Event verwendet o. ä.
wenn es keine Events gibt, die abgefangen werden könnten, müsstest du dir merken, welche Taste (oder welcher Buchstabe) bei der letzten Prüfung im Gedrückten Zustand (Down) war und welche nicht (Up) (anhand dessen könntest du dir selbst die Events basteln (sofern es keine gibt (was ich ein wenig bezweifle))

da du dann letztendlich immer ein Event haben wirst, welches nicht (ohne weiteres) wiederholt aufgerufen wird, hast du auch nicht die Notwendigkeit, eine Funktion zum Pausieren aufzurufen
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

5

05.06.2012, 15:35

Die SFML beinhalltet eh ein eigenes Event System ...
Ich könnte dir als Beispiel selber nur etwas geben, was du ihnehin auf der Offiziellen SFML - Homepage finden kannst unter Tutorials
Hier der Link, damit sollte es machbar sein: klick

Das was du suchst is das Event KeyPressed (Event.Type == sf::Event::KeyPressed), mit dem du mit Hilfe des KeyCodes (Event.Key.Code) die Taste abfragen kannst ;)

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

6

05.06.2012, 15:38

Danke für die Antwort , hat sich aber eledigt^^
funktioniert jetzt alles prima :)
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

7

05.06.2012, 15:54

aber du kannst ja dennoch schreiben, woran es lag und vielleicht noch, wie du es gelöst hast

stell dir einfach vor, abgeschnitten von der Außenwelt geschieht in einem Krimi ein Mord und alle anwesenden Personen wollen den Mörder entlarven
das wäre so, als würde am nächsten Tag die Rettung kommen und die Mördersuche beendet werden ;)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

8

05.06.2012, 17:36

Upps , tut mir leid^^
Klar sag ich voran es lag:

Also im Grunde war an der Abfrage alles richtig nur iwie funktioniert die while-Schleife mit dem Window.GetEvent()
nicht richtig hab also alles in die Framework.cpp verfrachtet.

Dort funktioniert diese Schleife noch richtig und das unendliche dranhängen hat aufgehört!

MfG Marcel
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

Werbeanzeige