[GELÖST] Als Methodenparameter eine Funktion?
Übersicht

CO2ehemals "SirMO"Betreff: [GELÖST] Als Methodenparameter eine Funktion? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Ich habe ein Problem: Ich habe eine Klasse TTile, diese sieht wie folgt aus BlitzMax: [AUSKLAPPEN] Type TTile So, nun das Problem: Ich müsste ja jetzt für jedes möglich ActionEvent ein Case in der Exec()-Methode anlegen. Sauberer wäre es natürlich, wenn ich in ActionEvent statt eines ints eine andere Funktion "speichere", die dann mit Exec() aufgerufen wird. Ist sowas möglich? Noch etwas anderes: Wie man vielleicht merkt, ist dieser Type für eine Tilemap. Ich habe das dann so geplant, dass ich ein 2-Dimensionales Array dieses Types anlege und damit meine Tilemap habe. Die Tilemap soll durchaus etwas größer werden, habe ich da eine Begrenzung außer die RAM-Größe? Und ist so ein System effizent (Kann ich, wenn ich auf dem Bildschirm 25 x 25 Tiles, die so gespeichert sind, gemalt werden trotzdem noch 60 FPS erreichen?) |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
- Zuletzt bearbeitet von CO2 am Sa, Okt 12, 2013 3:28, insgesamt einmal bearbeitet
![]() |
Tennisball |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
1) Ja, das ist möglich. Funktionspointer ist das Stichwort. Du kannst sie so benutzen: BlitzMax: [AUSKLAPPEN] Local pointer:Int() Falls du Parameter hinzufügen möchtest, musst du das beim Pointer auch definieren, so etwa: BlitzMax: [AUSKLAPPEN] Local pointer:Int(x:Int) Beachte, dass der Funktionspointer immer nur auf Funktionen zeigen kann, die vom selben Typ sind und die selben Parameter annehmen. 2) Das sollte im Normalfall locker funktionieren. Falls du wirklich eine riesige Map hast, kannst du die auch nach und nach laden und nicht alles auf einmal. Gruß, Tennisball |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, vielen Dank ![]() Also habe ich das nun wie folgt umgeschrieben BlitzMax: [AUSKLAPPEN] Type TTile Wie kann ich dann in der Parameterliste des Konstruktors den Parameter übergeben? Ein HalloWelt(5) scheint nicht zu funktionieren... Und wie komme ich aus der Methode Exec() an den im Kontruktor angegebenen Funktionsparameter? Oder muss ich da extra noch ein Field im Type anlegen, das ich dann im Konstruktor beschreibe und dann in der Exec()-Methode als Funktionsparameter dient? Zu 2.) Gut, ich habe mal hochgerechnet, das die geplante Tilemap ungefähr 25Mb groß ist (5000 x 5000 Tiles)... Also brauche ich mir wahrscheinlich keine sorgen wegen des RAMs machen. ![]() |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
In der Parameterliste kannst du nur die Funktion selbst übergeben, also "HalloWelt". Dann müsstest du noch einen Int-Parameter anfügen und diesen ebenfalls übergeben. Diesen könntest du dann in einem Field speichern und bei Exec() der Funktion als Parameter mitgeben:
BlitzMax: [AUSKLAPPEN] Function Create:TTile(TileID:Int, Action:Byte, ActionFunction:Int(x:Int), wert:Int) Und wenn du in Exec nach dem Funktionsaufruf irgendwie wieder auf den Parameter zugreifen willst, dann muss der Parameter ein Objekt/Type sein, oder ein Referenz-Parameter (x:Int Var). Oder einfach eine Funktion nehmen, die einen Rückgabewert liefert. BlitzMax: [AUSKLAPPEN]
|
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, besten Dank!
Damit hat sich das Thema geklärt. ![]() |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group