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

18.06.2010, 22:44

Events aus der SFML kriegen

Ich bin momentan dabei für ein kleines Pong ein Framework, wie das von Heiko zu schreiben.
Mein Problem ist nun, dass man bei der SDL ja anfragen konnte welche Knöpfe gedrückt waren.
Bei der SFML habe ich das alles auf einem Stack.
Wenn ich jetzt aber das Framework so halten will, dass es nur mit dem Spiel kommuniziert, dann
ergibt sich ein Problem.
Meine Frage ist, ob es ein Möglichst kleine Lösung gibt, oder ob der Ansatz falsch ist.
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

2

18.06.2010, 22:57

Schau dir mal die Beispielprogramme aus der SFML-Doku an, da ist ein beispiel für eine Typische SFML-Nachichtenschleife.

In der SFML bekommst du für jedes Event (Tastendruck, Mausklick etc.) eine Nachicht, diese musst du abfangen und verarbeiten...

Ansonsten schau dir mal die Klasse sf::Input an...
http://www.sfml-dev.org/documentation/1.…sf_1_1Input.htm

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

3

19.06.2010, 19:00

ja danach hab ich gesucht
danke
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

4

01.07.2010, 19:02

Das Spiel ist fast fertig, lediglich der Input Funktioniert noch nicht so wie er eigentlich sollte.
Eingebunden habe ich das ganze per:

C-/C++-Quelltext

1
bool  KeyDown (sf::Key::Code Key_Code){return Input.IsKeyDown(Key_Code);}

Input ist einfach in der selben Klasse unter Private erzeugt worden als sf::Input

EDIT: Okay Fehler gefunden, verknüpfe Input jetzt mit App aber die Funktion liefert immer noch 0 zurück
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Flonk« (01.07.2010, 19:30)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

5

01.07.2010, 19:07

was funktioniert daran jetzt nicht?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

6

01.07.2010, 19:31

Siehe Edit... sry hab mich davor sehr ungenau ausgedrückt
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

7

01.07.2010, 20:29

Deine Funktion sollte eigentlich beim drücken der Taste true zurückgeben, ich habe sie mal mit folgenen Minimalcode getested:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

#include <iostream>

sf::RenderWindow App(sf::VideoMode(400, 400, 32), "Test");
const sf::Input& Input = App.GetInput();


bool  KeyDown (sf::Key::Code Key_Code)
    {
return Input.IsKeyDown(Key_Code);
    }

void main()
    {
        
    
    while(App.IsOpened())
        {
                sf::Event Event;
                 while (App.GetEvent(Event))
                     {
                    if (Event.Type == sf::Event::Closed)
                    App.Close();
                     }

        if(KeyDown(sf::Key::A))
            std::cout<<"A Gedrückt"<<std::endl;

        App.Display();
        }

    }

8

01.07.2010, 22:45

Danke Toastbrot die Funktion habe ich so auch im Tutorial gesehen, das Problem ist nur, dass bei mir App ein Pointer ist, was dazu führt dass ich den Input direkt in der Funktion an das Fenster Anhängen muss

C-/C++-Quelltext

1
2
3
4
5
6
bool CFramework::KeyDown(sf::Key::Code Key_Code)
{
    const sf::Input& Input = App->GetInput();
    return  Input.IsKeyDown(Key_Code);
    
}


da mir ansonsten fehlermeldungen um die ohren Fliegen, die mir sagen, das Für mein Framewrok, dass als Singleton implementiert ist, kein geeigneter Konstruktor vorliegen würde.
Aber diese Funktion liefert mir immer nur 0 zurück, die KeyCodes kommen im Prinzip sinnvoll an, aber irgendwie klappt das mit dem input nicht.
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

9

02.07.2010, 11:52

Wenn die Key_Codes richtig ankommen funktioniert bei mir auch diese Version der Funktion, der Fehler muss woanders liegen.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

10

02.07.2010, 12:51

zeig mal deine eventschleife.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige