[Monkey] Field in der Mutter-Class ändern. Wie geht das?
Übersicht

![]() |
MidimasterBetreff: Field in der Mutter-Class ändern. Wie geht das? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe gerade folgendes Problem. Ich möchte um Performance zu sparen, den Bildschirmaufbau nicht 60x in der Sekunde durchführen, sondern nur dann, wenn sich eines der Bildelemente wirklich verändert hat. Dazu habe ich mit eine Variable MalenNoetig% in der Haupt-Klasse ausgedacht und die soll nun von den Bildelementen der Unterklassen gesetzt werden, wenn sich dort etwas getan hat.
symbolische Code: BlitzBasic: [AUSKLAPPEN] Class A Extends App Mein Problem nun: Wie spreche ich nun eine Variable der Mutterklasse von einer Unterklasse aus an? "Super" führt in MONKEY zu einem Fehler. Hier der Vollständigkeit halber ein Programm dazu: BlitzMax: [AUSKLAPPEN]
|
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auf die Gefahr hin, mich als absoluter Monkey-Noob zu outen (bin ich aber eigentlich auch): Class B hat A ja nur dann als "Mutter"-Klasse, wenn B von A erbt - diese also extended (man verzeihe mein Denglisch). Ich weiss nicht, ob Monkey diese Möglichkeit bietet und, ob es in dein Problem passt, aber du könntest ja alternativ MalenNoetig% als global in A deklarieren und in B einfach A.MalenNoetig setzen.
mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du von einer Klasse erbst, erhältst du auf die Member der Basisklasse automatisch Zugriff, als ob du sie in deiner erbenden Klasse definiert hättest. Um aber auf die Felder einer Basisklasse zugreifen zu können, musst du dafür sinnigerweise auch von einer Klasse erben, was "BildElemente" bei dir aber nicht tut.
In diesem Fall ist Vererbung allerdings nicht unbedingt sinnvoll. Ich würde eher vorschlagen, die "MalenNoetig"-Variable in "ErstesSpiel" global zu machen, so dass du von allen zeichnenden Klassen Zugriff darauf hast. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah, danke ich habs gleich ausprobiert und es funktioniert auch schon.
Meine Klasse ErstesSpiel ist ja noch mal Tochter der App-Klasse in Monkey. Welche weiteren Auswirkungen hat nun das Umändern von MalenNoetig% von Field auf Global? Reicht Global auch in die Main() und in andere Instanzen des Spiels? @Noobody: "erben" wäre also, wenn ich die Klasse Bildelemente mit Extends ErstesSpiel erweitern würde. Warum wäre dies "nicht unbedingt sinnvoll" und welche neg. Auswirkungen hat das dann auf das Spiel? Da ja später tatsächlich auch andere Spiel-Unterklassen solch einen MalenNoetig%=1 erzwingen können sollen, ist mir die Variante mit dem GLOBAL auch sehr schön. Danke an euch beide |
||
![]() |
Shinkiro1ehemals "Espada" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Globale Variablen einer Klasse können wie folgt angesprochen werden (und das von überall aus):
BlitzMax: [AUSKLAPPEN] ClassName.globaleVariable PS: Geht in Bmax genauso ![]() |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Midimaster: Wenn du in einem Type einen Member Global machst, ist er von überall aus erreichbar - man muss allerdings, wie von Shinkiro gezeigt, den Klassennamen vornedran stellen.
Was die Vererbungsfrage angeht: Faustregel ist, dass man sich immer fragen sollte: "Geht es auch ohne Vererbung?". Das Problem ist, dass Vererbung eine sehr starke Bindung ist, da man ausnahmslos alle Member und Methoden der Basisklasse erbt. Ändert man also die Struktur in der Basisklasse, sind alle erbenden Klassen betroffen und benötigen möglicherweise Codeänderungen. Um zu entscheiden, ob bei einer Klasse Vererbung angebracht ist, hilft mir immer die Eselsbrücke "[Erbende Klasse] ist ein [Basisklasse]". Z.B: Ein Mesh ist ein Entity, daher erbt Mesh von Entity. ErstesSpiel ist ein Programm, daher erbt es von Mojo.App (lication). Bildelemente aber sind kein Spiel, daher sollte man Vererbung hier vermeiden und den Zugriff eher über Methoden und Variablen lösen. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group