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

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

11

15.09.2011, 13:08

Und wo ist das Problem, wenn du es so machst, wie du es am Anfang beschrieben hast?

12

15.09.2011, 13:55

Lass die while schleife weg.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

13

15.09.2011, 14:08

Ne, die while Schleife sollte da bleiben, da sonst ggf. nicht alle Events überprüft werden, sondern nur das 1.
Stattdessen könntest du statt KeyPressed KeyReleased verwenden. Funktioniert bei mir wunderbar.

Lg

14

15.09.2011, 14:23

Zitat

bool sf::Window::GetEvent ( Event & EventReceived )

Get the event on top of events stack, if any, and pop it.

Parameters:
EventReceived : Event to fill, if any

Returns:
True if an event was returned, false if events stack was empty


der macht also da nix anderes als zuschaun ob überhaut ein Event da ist. Kann man meiner Ansicht nach auch weglassen.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

15

15.09.2011, 14:36

wenn ich while (App.getevent ()) weg lasse sagt die IDE das es nicht geht. Und ob KeyPressed oder Released ist das gleiche Problem. Ich muss wie verrückt auf die Taste hauen und glück haben das das Programm mein Tastenschlag erkennt.

16

15.09.2011, 14:44

Wie ist die Fehler Meldung ?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Gui (sf::RenderWindow &App, int &Modus, sf::Font &Font_Impact, int &Auswahl)
{
    sf::Event Steuerung;
    switch (Modus)
    {
        // Hauptmenü
        case 1:
        {
           // Hoch&Runter switch
           if ((Steuerung.Type == sf::Event::KeyReleased) && (Steuerung.Key.Code == sf::Key::Down))  
          {
                Auswahl--;
           }
           if ((Steuerung.Type == sf::Event::KeyReleased) && (Steuerung.Key.Code == sf::Key::UP))          
          {
                Auswahl++;
           }


Das müsste so hinhaun (Kann aber nicht testen auf arbeit).
sf::Event Steuerung; vor die Switch Anweisung sonst Mekert der Compiler (zumindesten VC2008)
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Darkrel

Treue Seele

Beiträge: 143

Wohnort: Zürich

Beruf: Student ETH Zürich

  • Private Nachricht senden

17

15.09.2011, 14:51

App.GetEvent(Event) füllt das Event und gibt dir die Möglichkeit innerhalb einer while - Schleife alle verbleibenden Events auf dem Stack abzuarbeiten. Also drin lassen.

Edit: Hast du es schonmal mit sf::Input probiert?

C-/C++-Quelltext

1
const sf::Input& Input = App.GetInput();


Zitat

This event system is good enough for reacting to events like window closing, or a single key press. But if you want to handle, for example, the continous motion of a character when you press an arrow key, then you will soon see that there is a problem : there will be a delay between each movement, the delay defined by the operating system when you keep on pressing a key.

A better strategy for this is to set a boolean variable to true when the key is pressed, and clear it when the key is released. Then at each loop, if the boolean is set, you move your character. However it can become annoying to use extra variables for this, especially when you have a lot of them. That's why SFML provides easy access to real-time input, with the sf::Input class.


Das steht direkt unter der von dir zitierten Passage.

Edit2: Selbst wenn du die while - Schleife weglässt, was ich nicht machen würde, dann musst du immernoch mindestens ein mal App.GetEvent(Steuerung) aufrufen, sonst ist Steuerung einfach nicht mit Daten gefüllt ;)
Am besten mit einer if - Abfrage, denn wenn false zurückgegeben wird, wurde kein Event gefunden.
:cursing:

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Darkrel« (15.09.2011, 15:00)


18

15.09.2011, 14:54

Ich schau heute abend mal wie ich das bei mir gemacht habe. Ohne Gedächnisstütze Rate ich auch nur ?(
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

19

15.09.2011, 16:55

void GUI sollte dann in der besagten while-Schleife ausgeführt werden....

MfG
Check

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

20

15.09.2011, 17:22

Irgendwie scheint mir "letzte Abfrage speichern" wesentlich einfacher. ;-)

Werbeanzeige