Objekte/Types übergeben
Übersicht

![]() |
AnaBetreff: Objekte/Types übergeben |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo zusammen,
ich frage mich gerade ob es eine schönere möglichkeit gibt als Type über ein feld mit durchlaufender Nummer zu erreichen. Zum Beispiel das ich keinen int übergebe und dann alles nochmal in jeder funktion durchlaufen muss sondern das objekt bzw einen pointer oder vergleichbares übergebe? Bisher hab ich das immer so gemacht, aber es erscheint mir viel verschwendete leistung wenn man es auch anders lösen könnten. t\ID ist ein Type feld von ype das fortlaufend nummerid sein soll damit jeder type zweifelsfrei daran identifiziert werden kann. Code: [AUSKLAPPEN] For t.ype = each ype if t\ID = gesuchter_Typ then ; tu irgendwas funktion_die_was_mit_dem_Type_macht(gesuchter_Typ) endif next Function funktion_die_was_mit_dem_Type_macht (x) For t.ype = each ype if t \ID= x then ..... |
||
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube nicht, jedenfalls mache ich es auch immer so ![]() |
||
Mein DeviantArt Profil
Gewinner des BAC #136 |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich auch. Ich finde die Methode übrigens auch gar nicht mal so langsam. Da kannst du ruhig Types mit 50-80 Fields ausstatten und 200-1000 von denen erstellen. Geht immer noch ohne nennenswerten Zeitaufwand für den Computer. Weiß auch gar nicht ob das überhaupt mit unseren MilliSecs() messbar wäre.
Ich bin damit immer super ausgekommen. Solange es keine Verschachtelung von 2 Types dieser Sorte ist, denn da wird der Aufwand ja bekanntlich quadratisch. ![]() |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn ID einzigartig sein soll, warum dann nicht mit Object![]() ![]() Wenn es allerdings ein "zusammenfassender Typ" ist muss mans so machen wie du es hast. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Evtl hilft dir mein Beitrag zum optimierungsthread. Sonst ist Handle und object das Höchste der Gefühle
https://www.blitzforum.de/foru...246#260246 |
||
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für die antworten ![]() Also ist es eigentlich sinnvoller nicht wie folgt Code: [AUSKLAPPEN] For t.ype = each ype if t\ID = gesuchrter_Type Funktion1(gesuchrter_Type) funktion2(gesuchrter_Type) funktion3(gesuchrter_Type) endif next function function1 (gesuchrter_Type) For t.ype = each ype if t\ID = gesuchrter_Type [tue a] endif next end function function function2 (gesuchrter_Type) For t.ype = each ype if t\ID = gesuchrter_Type [tue b] endif next end function function function3 (gesuchrter_Type) For t.ype = each ype if t\ID = gesuchrter_Type [tue c] endif next end function sondern so Code: [AUSKLAPPEN] For t.ype = each ype if t\ID = gesuchrter_Type [tue a] [tue b] [tue c] endif next das problem löst ohne die einzelnen prozeduren in functions auszulagern, wobei das ja eigentlich schöner und übersichtlicher ist. Aber den Funktionen kann ich das nicht gleich mitgeben welcher der gesuchte ist oder ginge das mit Object und handle so ganz schlau bin ich noch nicht aus den beiden geworden? die ersetzen nur das Field Id in den types? |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Suche den Type 1x heraus und übergib die Instanz direkt an die Unterfunktionen, so dass die nicht mehr die Liste durchsuchen müssen.
BlitzBasic: [AUSKLAPPEN] Type TTest |
||
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) |
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also kann man doch objekte übergeben?
Sau gut ![]() Kann ich auch ein Array mit diesen pointern machen? sowas wie Code: [AUSKLAPPEN] Dim Array (5,5) For t.test = each test if t\id = gesucht then array (x,0) = t x = x + 1 endif next Eine Nullreferenz kann man denen ja z.b nicht übergeben, aber dann sind sie ja bei der initalizierung int werte oder? Gibs dafür evenetulle was wie das # oder $ ? Und gleich noch eine Frage kann ein Type so auch auf einen anderen verweisen? Also eventuell so Code: [AUSKLAPPEN] Type erster field referenz end type For r.zweiter = each zweiter if r\id = gesucht then t.erster = new erster t\referenz = r endif next Und zu guter letzt geht das auch bei B3D? Da ist die Notation wenn ich das richtig sehe variable.typename\field ansonsten geht es nicht oder? Danke |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann ich auch ein Array mit diesen pointern machen?
Ja. Code: [AUSKLAPPEN] Dim Array.TTest(5,5) Neben den Datentypen %, #, $ kann man auch Types verwenden.
Wenn kein Type für ein Feld erstellt oder verlinkt wurde, ist das Feld NULL. Und gleich noch eine Frage kann ein Type so auch auf einen anderen verweisen? Ja. Code: [AUSKLAPPEN] Type Terster
Field meinzweiter.Tzweiter End Type Type Tzweiter Field wert% End Type Auch hier gilt: ist der Variable "meinzweiter" kein Eintrag zugewiesen, ist sie NULL. Aber nicht vergessen: Type-Listen sind Global. Wenn du für dein Array 36 Einträge erzeugst, sind sie Sowohl in der Liste als auch im Array verlinkt. Wenn du mehr als einen Type in "meinzweiter" erstellst, ist der Ursprüngliche noch in der Liste, aber du kann nicht für eine Instanz von Terster zugehörige Tzweiter Instanzen durchgehen: Es gibt nur 2 Globale listen, in denen alle Instanzen liegen. Die dürfen nur beliebig oft verlinkt werden. Nach der Deklaration verwende ich nur noch variable\field - der Type sollte sich aus dem Variablennamen ergeben. |
||
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) |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
übrigens: um eine Liste von mehreren Objekten die zu einem Objekt gehören zu erstellen kan man bei fixer länge einen blitzarray:
BlitzBasic: [AUSKLAPPEN] Field liste.TWasAnderes[15] und bei variabler länge eine Bank mit Handle und Object verwenden: BlitzBasic: [AUSKLAPPEN] ... ist aber eher kompliziert. |
||
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jungs ihr seid großartig vielen dank ![]() |
||
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
So nochmal eine weiter Frage, hier soll jede Figur "unendlich" viele Fähigkeiten bekommen.
Damit die nur ein Feld bekommt dachte ich mir, ich verweise jeweils auf die erste Fähigkeit und von jeder Fähigkeit auf die jeweils folgende. Damit das nun funktioniert wollte ich folgendes Konstrukt verwenden, da hab ich allerdings eine illegale type convertion Code: [AUSKLAPPEN] ;Wird weiter oben im Funktionsrumpf übergeben: objekt.figur
If objekt.figur\naechste.faehigkeit = Null Then objekt.figur\naechste.faehigkeit = fae Else objekt2.faehigkeit = objekt.figur\naechste.faehigkeit While objekt2.faehigkeit\naechste <> Null ; Hier liegt das Problem soweit zumindest objekt2.faehigkeit = objekt2.faehigkeit\naechste Wend fae\naechste = objekt2.faehigkeit EndIf Edit oh sorry gerade gemerkt das ist ein doppelpost .... |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Damit dieser Ansatz funktioniert, wäre es für mehrere Figuren nötig, die entsprechenden Fähigkeiten zu duplizieren; ansonsten zerstört die neuste Figur automatisch die Reihenfolge des "nächste" Felds.
Ich würde da eher zu Silver_Knees Idee mit der Bank im letztem Beitrag greifen; die kann man wenn nötig vergrößern um mehr Platz für Fähigkeiten zu machen. |
||
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) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group