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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

02.10.2011, 09:26

Machs doch so wie idontknow gesagt hat?

idontknow

unregistriert

12

02.10.2011, 11:19

Was ich meine ist, wenn ich jetzt sowas schreibe:

C-/C++-Quelltext

1
2
3
4
while (window.PollEvent(event)) {
    if (event.type == EventTypeKeyPressed && event.key.code == KeyCodeRight)
        player.Move(10, 0);
}


Der Spieler würde aus irgendeinem Grund "stocken", sprich es wäre keine flüssige Bewegung.
Muss daran liegen, dass immer erst andere Nachrichten verarbeitet werden.


Polling war halt noch nie gut.

13

02.10.2011, 11:53

Polling benutze ich ja auch nur noch, weil ich zu Faul bin/war etwas neues zu schreiben ^^
Ich bin jetzt am überlegen ob ich nicht einfach den kompletten Input in einen InputContext verschiebe.
Jedoch weiß ich nicht wie dann noch auf Dinge wie (De)Aktivierung vom Fenster oder Vergrößerung von einem Fenster reagieren soll.
Da könnte man virtuelle Methoden bereit stellen, die einfach nach bedarf beim Vererben überschrieben werden?!

idontknow

unregistriert

14

02.10.2011, 11:56

Du könntest das Polling der Events auch in deinem Framework erledigen und dann den Input schonmal vorverarbeiten, sodass du quasi seperat nur durch die Input Events pollen kannst.

Was ich nicht ganz verstehe: SFML benützt doch den selben Ansatz wie du und da funktioniert es auch! Kannst dir ja mal ankucken wie es dort gelößt wurde.

15

02.10.2011, 12:05

Also die SFML hatte ich mir schon mal angeschaut. Der hat ja auch ganz normales Polling und es gibt dann so eine Input Klasse,
die intern alle s Events abfängt und bool Werte für die einzelnen Keys und Buttons hat.
Halt das was du weiter oben schon vergeschlagen hattest. Nur er hats schon fest integriert.

16

02.10.2011, 22:24

Könntest du dein Klassendesign mal in ein Diagramm packen? Ich komm grad irgendwie nicht ganz mit, was du genau machst (polling ok - aber dann? virtuelle Methoden - für jedes fenster eine eigene Ableitung oder was? )

MfG

17

03.10.2011, 14:23

Ich erklärs es einfach mal so, bin zu Faul ein Diagramm zu malen (kanns auch iwie nicht so gut :D)

Also aktuell verwende ich Polling um an alle Events, unter anderem auch Input, zu kommen.
Allerdings ist Polling ziemlich langsam, deswegen wollte ich ein neues System für Input schreiben.
Aber ich muss ja noch iwie an die anderen Nachrichten kommen, wie Window-Resize oder so was.
Daher wollte ich das Input jetzt in eine Klasse InputContext stecken. Jedes Fenster besitzt eben ein InputContext.
Und um die anderen Nachrichten zu verarbeiten hatte ich als Idee der Klasse Window einfach virtuelle Methoden zu geben, die nach bedarf
überschrieben werden können.
Als Bsp. habe ich meine neue Klasse GameWindow, die von Window erbt und die Methode OnResize() überschreibt.
So kann GameWindow eben auf das Resize-Event "zugreifen".

Ich hoffe das halbwegs verständlich ^^

idontknow

unregistriert

18

03.10.2011, 14:43

Wenn du schon ein Fenster hast mit einem InputContext, dann kannst du auch direkt über die WndProc einfach alle States abspeichern.

19

03.10.2011, 15:41

Ich hab das so gelöst, dass ich einen globalen EventHandler habe, bei dem jedes Fenster sich für gewisse Events anmeldet (per Delegate). Das funktioniert auch mit Wildcards, sprich: "Ich möchte alle Events fürs Fenster X haben, deren EventCode * entspricht" => holt _alle_ Events



MfG

Werbeanzeige

Ähnliche Themen