Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » state pattern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.11.2009, 20:26 Uhr
cmos



Hallo,
ich habe ein paar Fragen zum state pattern.
Meißtens wird es ja über eine Abstracte Klasse realisiert von
denen dan die jeweligen States erben.

State Funktionen sind doch meißtens Enter, Leave, Update, Draw, Move,
KeyboardEvent, MouseEvent.

Meien Frage ist, wie man z.b. Tastenkombinationen handhaben kann.
Wenn ich beispielsweiße eine Tastedrücke wird z.b. in den MoveState
gewechselt und das KeyboadEvent ausgelöst.

Wie ist das z.b. bei Kombinationen von Maus und Tastaturereignisse.
Z.b. wenn L und linke Maustaste gedrückt ist kann man ein bestimmtes
objekt bewegen...

Grüße,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.11.2009, 20:54 Uhr
0xdeadbeef
Gott
(Operator)


Das hängt stark davon ab, wie dein Eingabesystem konzipiert ist. Du könntest etwa auf ein Tastaturevent "L-Taste runter" reagieren, indem du den entsprechenden Handler in den Bewegungsstate versetzt, so dass zukünftige Mausevents davon behandelt werden.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.11.2009, 22:45 Uhr
cmos



Hallo,
danke für die schnelle Antwort. Wenn ich dich richtig verstanden habe,
meinst du, ich solle eine Methode hinzufügen die genau jenes Ereignis
bearbeitet ?

Ich arbeite noch mit der MFC und dort gibt es ja die diversen
Methoden wie OnKeyDown, OnLButtonDown usw. .

Ob eine Taste gedrückt ist, währen ich die Mausbwege und ob auch die Maustaste gedrückt ist, kann ich doch dann nur in der OnMouseMove abfangen mit dem Entsprechenden Flag
und GetAsyncKeyState.

Das ist eben noch das Problem , welche sich lösen muss.

Grüße,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.11.2009, 23:02 Uhr
0xdeadbeef
Gott
(Operator)


Ich dachte, du hast da ne State-Pattern implementiert. Dann sollte doch in dem Moment, in dem das Mausevent eintrifft, der aktive Zustand bereits das richtige Verhalten vorgeben.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.11.2009, 23:04 Uhr
cmos



Ja, teilweise schon. Also ist noch nicht fertig. Aber ich brauch doch auch
die Methoden OnMouseMove oder OnKeyDown.

Oder macht man das ganz anders. Wenn das Quatsch ist, was ich mache,
dann nur raus mit der Sprache.


Grüße,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.11.2009, 23:27 Uhr
0xdeadbeef
Gott
(Operator)


Ich weiß ja nicht genau, was du da eigentlich machst oder vorhast.

Wenn dein Bedienkonzept so aussieht, dass das Drücken von Tasten das Verhalten der Maus verändert, dann verwalte halt einen Zustand für die Maus und setze in der OnKeyDown-Methode den Zustand entsprechend. Wenn du dann ein MouseEvent kriegst, schleifst du es an den Zustand durch, und der kümmert sich um das, was eigentlich gemacht werden soll. State-Pattern halt.

Mir ist nicht ganz klar, wo das Problem liegt.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 19.11.2009 um 23:28 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.11.2009, 15:10 Uhr
cmos



Hallo nochmal,

mein Problem ist folgendes.
Nehmen wir an ich habe zwei MEthoden eignefügt die KeyDown und MouseMove abfangen.
Um das dann mit dem State zu verarbeiten, hatte ich an so etwas hier gedacht.


Code:
void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
     pActiveState->KeyEvent(nChar);
}
void OnMouseMove(UINT nFlags, CPoint point)
{
     pActiveState->MouseEvent(nFlags, point);
}




Wenn ich eine Taste drücke wird OnKeyDown ausgelöst. Wenn ich die Taste gedrückt halte
wird kein neues OnKeyDown ausgelöst. Kann dann aber ein MouseMove oder z.b.
ein LButtonDown noch aufgerufen werden, wenn ich eine Taste au der Tastatur gedrückt halte ?

Ich hab das Statepattern noch nicht so oft benutzt, in MFC noch gar nicht.

Grüße,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
24.11.2009, 11:20 Uhr
cmos



Hallo,
hat sich erledigt.

Grüße,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: