Type-Instanzen in Type.Function erstellen/damit arbeiten?
Übersicht

EschenbachBetreff: Type-Instanzen in Type.Function erstellen/damit arbeiten? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Leute!
ich habe in moment ein Problem mit Types in Blitzmax, und zwar will ich in einer statischen Funktion eines Types eine bzw. mehrere Instanzen eines Types erstellen und dann damit arbeiten, aber irgendwie klappt das nicht ganz, hier ein Beispiel-Code, um mein Problem zu zeigen: Code: [AUSKLAPPEN] Type TmeinType
Field testtext:String = "Standard" Function Create:TmeinType() Local bla:TmeinType = New TmeinType bla.testtext = "Funtion TmeinType.Create() funktioniert!" Return bla End Function Function erstelle_und_bearbeite() Global meinType:TmeinType = TmeinType.Create() meinType.testtext = "erstellen und bearbeiten funktioniert!" End Function End Type TmeinType.erstelle_und_bearbeite() Print meinType.testtext nochmal zum erklären: in der Funktion "erstelle_und_bearbeite"(im richtigen Code hat sie nicht sonen langen Namen ![]() Im Beispiel wird die Instanz wohl erstellt, aber man kann außerhalb des Types nicht mehr darauf zugreifen, kann jemand helfen? |
||
Gruß, Eschenbach |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
erstelle_und_bearbeite() muss auch das erstellte Teil zurückliefern, so wie Create...
Edit: Global innerhalb der Funktion bedeutet, dass der Wert bis zum nächsten Funktionsaufruf gespeichert wird, im Hauptprogramm ist "meinType" nicht bekannt. Code: [AUSKLAPPEN] Type TmeinType
Field testtext:String = "Standard" Function Create:TmeinType() Local mt:TmeinType = New TmeinType mt.testtext = "Funtion TmeinType.Create() funktioniert!" Return mt End Function Function erstelle_und_bearbeite:TmeinType() Local mt:TmeinType = TmeinType.Create() mt.testtext = "erstellen und bearbeiten funktioniert!" Return mt End Function End Type Local meinType:TmeinType = TmeinType.erstelle_und_bearbeite() Print meinType.testtext |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
JolinahBetreff: Re: Type-Instanzen in Type.Function erstellen/damit arbeiten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eschenbach hat Folgendes geschrieben: ... eine Instanz erstellt und bei jedem Schleifendurchgang aktualisiert, das heißt ein Bild bewegt sich auf dem Bildschirm und es werden jedesmal die Koordinaten erneuert und auf Kollision geprüft. ...
Warum erstellst du denn dazu jedesmal ne neue Instanz? Du kannst ja auch die selbe Instanz immer und immer wieder aktualisieren: Code: [AUSKLAPPEN] Type TMeinType Field testtext:String Function Create:TMeinType() Local tm:TMeinType = new TMeinType tm.testtext = "Startwert" return tm End Function Method Update(newtext:String) testtext = newtext End Method End Type Local tm:TMeinType = TMeinType.Create() Print tm.testtext tm.Update("Neuer Wert") Print tm.testtext tm.Update("Anderer Wert") Print tm.testtext |
||
Eschenbach |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich erstelle immer neue instanzen, weil zu manchen Zeitpunkten mehrere Instanzen existieren, es geht um ein kleines Spiel, wo Dinge von oben herunterfallen und man diese als Spieler einsammeln muss(das Spiel gibts schon sehr häufig, aber is ja nur ne Übung für mich). Und dieses Type is dazu da, diese Dinge, die herunterfallen, bei mir sind es Eier, zu reprsäsentieren/verwalten. Ansonsten wüsste ich ja auch, dass es unsinnig wäre, jedesmal eine neue Insatnz zu erstellen.
@Xerxes: das mit dem zurückliefern ist schlecht, das hätte ich mit einer Instanz auch gemacht, aber ich will mit dieser Funktion alle gerade existierenden Eier updaten, d.h. die y-Position aktualisieren, die eingefangen Eier löschen, und die heruntergefallenen Eier als kaputte Eier darstellen(und nach einiger Zeit löschen). Geht das irgendwie mit statischen Funktionen in Types zu lösen oder wäre es besser eine Funktion außerhalb des Types zu schreiben oder direkt ins Hauptprogramm? danke für eure Hilfe! |
||
Gruß, Eschenbach |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achso, dann hab ich dich falsch verstanden, sorry ![]() Vielleicht hilft dir das weiter? Code: [AUSKLAPPEN] Type TMeinType
Global list:TList Function Create:TMeinType() Local tm:TMeinType = new TMeinType If list = Null Then list = new TList list.AddLast(tm) return tm End Function Function Update() If list = Null Then Return For local tm:TMeinType = EachIn list 'Aktualisiere Objekt Next End Function End Type Hier werden alle Instanzen in einer statischen Liste gespeichert. Innerhalb einer statischen Funktion kann man diese Liste dann abarbeiten. Nicht mehr benötigte Instanzen kannst du dann mit Remove einfach aus der Liste entfernen. |
||
Eschenbach |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok, also viel weiter geholfen hat das nicht, denn so weit war ich in etwa auch schon, sorry
oder wenn ich weiter drüber nachdenke vielleicht doch ![]() ![]() Code: [AUSKLAPPEN] TmeinType.create() oder per
Code: [AUSKLAPPEN] mt.TmeinType = New Type erstellt habe und gleich danach in die List gesetzt habe, auch noch beim späteren aufrufen der Funktion bzw. auch außerhalb der funktion/des types zugreifbar sind
|
||
Gruß, Eschenbach |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, das geht dann auch von Aussen, da die Liste als statisch definiert wurde (global).
Code: [AUSKLAPPEN] Local tm:TMeinType = TMeinType.Create()
tm = TMeinType.Create() For tm = EachIn TMeinType.list 'Alle Instanzen durchgehen Next Die Liste bleibt also erhalten und ist auch beim nächsten Update noch da, so wie du es ursprünglich geplant hattest ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für ein Blitzbasic-Type-like verhalten kann man eine Liste für den Type erstellen und die New Methode überladen:
Code: [AUSKLAPPEN] SuperStrict
Type Ttest Field wert:Int Global list:TList = CreateList() Method New() list.AddLast(Self) End Method Function Create:Ttest(fw:Int) Local t:Ttest = New Ttest Return t End Function Function UpdateAll() For Local t:Ttest = EachIn Ttest.list Print t.wert Next End Function End Type Bei jedem Aufruf von Create wird eine Instanz erstellt und in der Liste abgelegt. Die Liste kann beliebig abgearbeitet werden... |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Eschenbach |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok, also dass das mit den lists dann wie in BB ist, war jetzt nichts neues für mich, aber trotzdem danke für deinen Hinweis und für eure Hilfe;) | ||
Gruß, Eschenbach |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group