Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Gast
|
Verfasst am: 07.09.2002, 20:38 Titel: Menüklasse |
|
|
Hi Leute,
also ich schreibe gerade eine Menüklasse, welche ein Menü auf Wunsch öffnet und die Daten der Maus empfängt. Nur ist das Problem, das ich ja nur Daten empfangen will, wenn das Menü auch offen ist. Wenn ich alles in eine Callbackfunktion schreibe (z.B. das Programm Schließen und dazu test auf übereinstimmung der Maus mit dem Button) dann wird diese ja auch während des Spieles ausgeführt und so kann es ja passieren, dass der Spieler irgendwo hinklickt, die Callbackfunktion diese Position als Button erkennt und es zu Fehlfunktionen kommt.
Kann man da vieleicht 2 Callbackfunktionen einfügen, sodass die eine dann in einer Unendlichschleife der Mainfunktion aufgerufen wird und die andere in einer Schleife der Menüklasse? Wenn ja, was muss ich da noch einfügen, damit die zweite Callbackfunktion auch aufgerufen wird.
Ich hoffe das hat jetzt irgendwer verstanden
Danke Karl |
|
Nach oben |
|
 |
DaN00b JLI'ler

Anmeldedatum: 10.08.2002 Beiträge: 159
Medaillen: Keine
|
Verfasst am: 07.09.2002, 23:35 Titel: |
|
|
versuchs doch mal mit directinput ist auch ne feine sache und recht einfach (und zuverlässiger net zu vergessen)  _________________ Carpe Diem - Seize the day - Nütze den Tag! |
|
Nach oben |
|
 |
Sören JLI Master Trainee

Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 08.09.2002, 10:36 Titel: |
|
|
hi
mach doch einfach eine variable, die den spielstatus speichert
also zum beispiel 1 für menü, 2 für spiel, 3 für credits
dann überprüfst du in der callbachfunk welcher status aktiv ist und führst die jeweiligen befehle aus
ps.ich kann nich groß schreiben, da mein handgelenk gebrochen ist |
|
Nach oben |
|
 |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 08.09.2002, 15:57 Titel: |
|
|
ich habe auch eine menü klasse.
ich habe das dann teilweise so wie miracle boy gesagt hat gemacht.
ich habe es aber auch noch so gemacht, das jedes menü noch einen status hat, also ob es angezeigt werden soll oder nicht.
wenn es angezeigt wird, dann wird auch die update methode des menüs ausgeführt ansonsten nicht.
die update methode geht durch die menüitem liste und führt die update methode jedes einzelnen items durch. die items prüfen ob die maus auf dem item ist und gedrückt wurde. wenn ja, wird der status action vom item auf 1 gesetzt. die update methode des menüs prüft diesen wert und wenn der wert true also 1 ist, wird die action methode des menüs ausgeführt und ein zeiger auf das item mit übergeben. die action methode kann man dann für jede abgeleteite klasse(also für jedes menü) überschreiben. |
|
Nach oben |
|
 |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 08.09.2002, 15:57 Titel: |
|
|
die action methode sieht für ein kleines menü dann so aus:
Code: |
void CMain_Test::Action(CMenuItem *pItem)
{
switch(pItem->Classify())
{
case CLASS_MENU_BUTTON:
{
CButton *pBtn = dynamic_cast<CButton*>(pItem);
if(pBtn->IsClicked())
{
if(!pBtn->GetName().compare("Back"))
{
SetStatus(0);
MENULIST->ShowMenu("MainMenu");
}
}
}
break;
}// switch
}
|
|
|
Nach oben |
|
 |
Gast
|
Verfasst am: 08.09.2002, 19:25 Titel: Danke |
|
|
Danke vielmals,
ich habe es jetzt mit dem Status gemacht. Noch eine Frage wegen des Codes:
Habe ich das richtig verstanden, die Zeile
Code: | CButton *pBtn = dynamic_cast<CButton*>(pItem); |
wandelt den Zeiger pItem in den Typ CButton um. Wenn dem so ist, wie funktioniert das, muss dann die Klasse CMenuItem genauso wie CButton sei oder wie sonst werden die Werte übernommen?
cu Karl |
|
Nach oben |
|
 |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 09.09.2002, 10:56 Titel: |
|
|
CButton ist von CMenuItem abgeleitet.
class CButton : public CMenuItem
{
.....
} |
|
Nach oben |
|
 |
|