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

moritz31

Treue Seele

  • »moritz31« ist der Autor dieses Themas

Beiträge: 259

Wohnort: Hessen

Beruf: Student

  • Private Nachricht senden

1

03.03.2011, 20:02

Probleme mit SFML und Draw()

Hi Leute,
wie die überschrift schon sagt hab ich ein Problem mit dem Anzeigen auf dem Bildschirm.
Also ich zeige alles mit

C-/C++-Quelltext

1
App.Draw(//Sprite)


am Anfang natürlich App.Clear()
und zum anzeigen App.Display().

Dazwischen ganz oft App.Draw() für die einzelnen Objekte.

Nun wollte ich ein Event erstelle, dass wenn ich Esc drücke, ein Menü gezeichnet wird.
Hab dazu ein Shape gemacht, das einen Kasten zeichnet.

Das Problem ist wenn ich nun das shape mir anzeigen lassen will,
wird es ganz kurz gezeigt und danach wird der bildschirm wieder der alte.

Wenn ich nun nochmal Escape drücke passiert gar nichts mehr.

Wäre froh über hilfe

Gruß
Moritz

2

03.03.2011, 20:41

Hallo!

Wie hast du das denn umgesetzt?

Kann es sein, dass du den Kasten nur in dem Frame anzeigst, in dem Escape gedrückt wurde? Im nächsten Frame ist Escape natürlich nicht mehr gedrückt und der Kasten wird nicht mehr angezeigt.

Gruß

3

03.03.2011, 20:48

Lass uns doch bitte nicht immer deine Probleme raten. Wie man bei der SFML etwas rendert (also mit Draw) wissen hier so gut wie alle, also zeig uns am Besten deinen (relevanten) Quellcode, dann können wir dir auch besser helfen.

Gruß
SaRu_

PS: Ich würde dir mal empfehlen dir ein gescheites Buch zur Spieleprogrammierung zu kaufen. Wenn ich mir so deine letzten Threads anschaue, dann stell ich fest, dass es häufig an Stellen hängt, die in einem Buch (wie z.B. C++ für Spieleprogrammierer) ganz gut erklärt werden. So sparst du dir wahrscheinlich eine Menge Nerven. ;)

moritz31

Treue Seele

  • »moritz31« ist der Autor dieses Themas

Beiträge: 259

Wohnort: Hessen

Beruf: Student

  • Private Nachricht senden

4

03.03.2011, 20:52

Joa,
das kann sein.

ich hab des so gemacht:

C-/C++-Quelltext

1
2
3
4
5
 if(Input.IsKeyDown(sf::Key::Escape)
{
App.Draw(sf::Shape::Rectangle(//usw));
App.Display();
}


So hab ich des gemacht.
Eigentlich fast logisch das des nur ein frame angezeigt wird,
aber wie mach ich des dass des mehrere frames angezeigt wird.

5

03.03.2011, 21:25

Wie wärs mit:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
bool ZeigeMenu = false;

if(Input.IsKeyDown(sf::Key::Escape))
{
    ZeigeMenu = true;
}

if(ZeigeMenu)
{
    App.Draw(...);
}


Jetzt musst du dir noch was ausdenken, wie du ZeigeMenu wieder false setzt um das Menü zu schließen. Das könntest du z.B. bei nochmaligem Drücken von Escape machen, dabei solltest du aber die Escape-Taste erst nach z.B. einer halben Sekunde wieder abfragen, bei 1 / 60 Sekunden pro Frame hat man schnell mal die Escape-Taste länger als einen Frame gedrückt und somit das Menü geöffnet und fast augenblicklich wieder geschlossen. ;)

Gruß
SaRu_

moritz31

Treue Seele

  • »moritz31« ist der Autor dieses Themas

Beiträge: 259

Wohnort: Hessen

Beruf: Student

  • Private Nachricht senden

6

03.03.2011, 21:58

Thx,
hab es mittlerweile so ähnlich selbst hinbekommen,
aber mit ner while schleife.
hat das ein nachteil?

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

7

03.03.2011, 21:58

für diesen fall eignet sich das abfragen von events besser. mit IsKeyDown hat man zwar mehr kontrolle aber auch mehr arbeit.
ja es hat nachteile. das programm hängt sich nicht auf?
"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