Denkanstoß für Buttons?
Übersicht

![]() |
M0rgensternBetreff: Denkanstoß für Buttons? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Leute.
Ich bräuchte einen kleinen Denkanstoß für meine klitzekleine GUI für mein Spiel. UNdzwar: Bisher habe ich die Klasse "TButton" Diese hat folgende Attribute: BlitzMax: [AUSKLAPPEN] Type TButton Jetzt hab ich aber folgendes Problem: Jeder Button soll ja etwas anderes bewirken. Ich hab mir jetzt gedacht, mit Delphi als Vorbild zu nehmen: Die Buttons sind immer global deklariert und jedem Button wird dann im Programm eine Methode zugeordnet, die das macht, was passieren soll, wenn man auf den Button klickt. Meine Frage jetzt: Kann ich die Methode in der Buttonklasse vorschreiben, also deklarieren und dann im eigentlichen Programm umschreiben? Oder muss ich doch für jeden Button im Hauptprogramm ne eigene Methode deklarieren und implementieren? Oder hab ich nen total falschen Ansatz? Wäre schön, wenn mir jemand nen Denkanstoß oder so geben könnte. Lg, M0rgenstern |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das System ist nicht so gut, da du für jeden Buttontyp einen eigenen Type brauchst.
Ich habe bei meiner GUI Funktionspointer genutzt. Das könnte z.B. so aussehen: BlitzMax: [AUSKLAPPEN] ... Dieses System ist sehr flexibel. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey.
Sorry, aber aus deinem Code werd ich nicht so ganz schlau. Könntest du das bitte ein wenig ausführlicher erklären? Ich streig da grade nicht durch, sorry. Lg, M0rgenstern |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax: [AUSKLAPPEN] 'Hier sind zwei Funktionen: Dadurch, dass du den Wert des Pointers überall ändern kannst, kannst du den Inhalt der entsprechenden Funktion erst im Hauptcode festlegen, sie aber von der GUI aus aufrufen. Damit sind Hauptcode und GUI immer noch sauber voneinander getrennt. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achso.
Also muss ich im Prinzip den Funktionspointer als Attribut der Klasse deklarieren und dann im Hauptcode dem Pointer die entsprechende Funktion zuweisen? Klingt logisch, vielen Dank. Eine Frage hätte ich noch: In deinem ersten Beitrag steht: BlitzMax: [AUSKLAPPEN] Field ClickAction(Data:Object) Ich kenn den Typ Object nicht. Was genau bedeutet der? Lg, M0rgenstern |
||
Macintosh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
der typ "object" kann ein beliebiger typ sein. String, TButton, ... es ist egal. Es ist quasie ein Mutables Objekt, das jedes andere Objekt "aufnehmen" kann | ||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine Ergänzung zu Macintoshs Beitrag:
Von "Object" sind alle Objekte abgeleitet. Daraus folgt dann, dass ein Object-Objekt alles sein könnte. (Das mit dem Zurückcasten hast du ja schon gelernt.) Ein Anwendungsbeispiel: Die TLists nutzen Object-Fields, um beliebige Objektarten speichern zu können. mfG mpmxyz Edit: Schlecht sind meiner Meinung nach nur die, die keine Fragen stellen, obwohl sie nichts verstanden haben. Wenn man eine Frage stellt, zeigt man, dass man weiß, was man kennt bzw. nicht kennt. |
||
- Zuletzt bearbeitet von mpmxyz am Fr, März 26, 2010 10:46, insgesamt einmal bearbeitet
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
OKay.
Vielen Dank. Werde das morgen alles umsetzen. Heute ledier nicht mehr (Verdammte Schule) Vielen Dank nochmal. (Irgendwie fühl ich mich schlecht. In der Beginners-Corner erscheinen dauernd neue Themen von mir...) Lg, M0rgenstern |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: (Irgendwie fühl ich mich schlecht. In der Beginners-Corner erscheinen dauernd neue Themen von mir...)
Ach Quark, dafür gibt es die Beginners doch... |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Macintosh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
es ist aber wichtig das wenn du einen neuen button mit z.b. TButton.create(..) erstellst auch sicherstellst das der fuktionspointer nicht leer ist. ich habe dazu extra immer eine Funktion die benutz wird wenn man nicht zugewiesen hat, erspart viele fehlermeldungen und programmabstürze! :) (müsste aber auch zu lösen sein indem man vor dem aufruf der Funktion prüft ob eine zugewiesen ist. | ||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Leute.
Ich hatte noch nicht früher Zeit das ganze zu testen. Habs jetzt grade versucht zu implementieren, aber das funktioniert nicht ganz. Weder mit: BlitzMax: [AUSKLAPPEN] AttackButton.OnClick = AttackButtonClick() In der Hauptschleife, nach dem der Butto erstellt wurde, noch so: [syntax="bmax"]Global AttackButton:TButton = TButton.Create(BAttackImage, BAttackSelectedImage, GraphicsWidth() / 2, GraphicsHeight() - 32, AttackButtonClick()) BlitzMax: [AUSKLAPPEN] ax"]Function Create:TButton(pIMage:TImage, pImage2:TImage, px:Int, py:Int, ClickAction:Object) Ich bekomme dann jedesmal wenn ich die Funktion zuweisen will folgenden Compilerfehler: Zitat: Compile Error: Unable to convert from 'Object' to 'Int(Object)'
Vielleicht kann mir ja jemand helfen. Lg, M0rgenstern |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. "Keine Klammern!" (Zitat aus einem früheren Beitrag) -> "AttackButton.OnClick = AttackButtonClick"
2. Funktionen sind keine Objekte. -> "..., ClickAction:Int(Parameter:Object))" mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, ich habs jetzt eigentlich genauso gemacht, aber ich bekomme immernoch die gleiche Fehlermeldung:
BlitzMax: [AUSKLAPPEN] Global AttackButton:TButton = TButton.Create(BAttackImage, BAttackSelectedImage, GraphicsWidth() / 2, GraphicsHeight() - 32) BlitzMax: [AUSKLAPPEN] Field OnClick(Data:Object) BlitzMax: [AUSKLAPPEN] Function AttackButtonClick() Lg, M0rgenstern |
||
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
Na wenn der Pointer aber auch was anderes beherbergen soll wie du als Callback übergibst...
Wenn dein Pointer so ausehen soll... BlitzMax: [AUSKLAPPEN] Field OnClick(Data:Object) dann muss der korrespondierende Callback so ausehen: BlitzMax: [AUSKLAPPEN] Function AttackButtonClick(Data:Object) |
||
Macintosh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
BlitzMax: [AUSKLAPPEN]
so musses sein. Du übergibst sonst einer Funktion parameter, die keine entgegenimmt! EDIT: Misst zu spät ;D |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group