Eigene Types kopieren?
Übersicht BlitzMax, BlitzMax NG Allgemein
SkabusBetreff: Eigene Types kopieren? |
Di, Jun 07, 2011 0:51 Antworten mit Zitat |
|
---|---|---|
Hallo!
Ich stehe gerade irgendwie auf dem Schlauch.Ich hoffe jemand kann helfen. Also... Ich habe für mein Projekt einen Typ enemyStr erstellt, dieser wird dazu verwendet Gegner zu definieren(Attribute etc.) Eine typische Gegnerdefinition sieht so aus: Code: [AUSKLAPPEN] Global batV1:enemyStr = New enemyStr
batV1.ID = 0 batV1.name = "schwache Fledermaus" batV1.level = 1 batV1.ResistanceCur = 10 batV1.ResistanceMax = 10 batV1.MentalPowerCur = 1 batV1.MentalPowerMax = 1 batV1.status = "Gesund" batV1.enEXP = 10 batV1.Strength = 3 batV1.Skill = 3 batV1.Shiftiness = 8 batV1.MentalStrength = 3 batV1.MentalPowerCur = 0 batV1.MentalPowerMax = 0 batV1.ResistanceCur = 10 batV1.ResistanceMax = 10 batV1.Destiny = 1 batV1.ArmorBonus = 0 batV1.Damage = 3 batV1.kiRoutine = 0 batV1.elAbFire = 0 batV1.elAbEarth = 0 batV1.elAbWind = 0 batV1.elAbWater = 0 batV1.elAbDark = 0 batV1.elAbHoly = 0 batV1.elAbBlood = 0 batV1.elAbBody = 0 batV1.elAbDragon = 0 batV1.elAbPoison = 5 batV1.elAbTime = 0 Dies ist aber wie man sieht nur die Blaupause für einen Gegner. Für mein Kampfsystem muss ich nun "Kopien" dieser Blaupause erstellen. Ich weiß aber nicht wie das gehen soll.Genauer: Ich weiß wie das in Java und C++ und C# geht, allerdings klappt das alles in BMax nicht so wie es soll... Ich kann ja nicht einfach schreiben: Local newEnemy:enemyStr = batV1 Denn dann referenziere ich ja nur auf das batV1-Objekt und ändere batV1 wenn ich z.B. Lebenspunkte abziehe etc. Ich hoffe das Problem ist klar geworden^^ Kennt jemand eine elegante, praktische Art wie ich davon Kopien erstellen kann OHNE jedes einzelne Attribut manuell zu übergeben? Wäre für eure Hilfe wie immer sehr dankbar! MfG Ulukai |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
XeresModerator |
Di, Jun 07, 2011 0:54 Antworten mit Zitat |
|
---|---|---|
Ginge mittels Reflection Clone Objects | ||
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) |
BladeRunnerModerator |
Di, Jun 07, 2011 13:17 Antworten mit Zitat |
|
---|---|---|
Es gibt da mehrere, verschieden kompfortable oder schnelle, Möglichkeiten.
Zum einen natürlich Xeres Vorschlag mit dem Cloning, welches auch tiefere Kopien erstellt, da Du ja mit den Metatags bestimmen kannst wie welches Feld behandelt werden kann. Wenn Du weitergehende Fertigkeiten in dieser Form benötigst kann ich dir auch Chaos.Clone empfehlen, was Dir nicht nur Cloning sondern auch beliebiges Laden und Speichern von Types ermöglicht. Zudem habe ich noch explizitere Kontrollmöglichkeiten eingebaut, und Chaos.clone kommt auch mit verschiedenen Arraytypen zurecht, was die oben verlinkte Möglichkeit an ihre Grenzen bringt. Chaos.Clone findest du hier: https://www.blitzforum.de/foru...hp?t=33951 Allerdings arbeiten diese Möglichkeiten mit Reflection, was deine Programme insgesamt etwas langsamer und größer macht, da eben die ReflectionDaten ständig zur Verfügung stehen müssen. Was Du - wenn es keine zu komplexen Types mit vielen Subtypes sind - machen kannst wenn es flott gehen soll wäre selbst eine Copy()-Methode zu schreiben: Code: [AUSKLAPPEN] Type Bla
field blub method copy:bla(source:bla) local c:bla = new bla c.bla = source.bla return c end method end type |
||
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 |
Schnuff |
Di, Jun 07, 2011 17:02 Antworten mit Zitat |
|
---|---|---|
Du könntest aber auch Types verschachteln. Ist die Frage, wie dynamisch dein System sein soll. Wenn du beispielsweise einen ShootEmUp baust, wäre dies die elegantere und einfachere Möglichkeit.
z.B. Code: [AUSKLAPPEN] Type TGegnerArt
Field Name Field MaxHP Field rePhysisch EndType Type TGegner Field GegnerArt:TGegnerArt Field MomentaneHP Field ... EndType Local GegnerArten_Baum:TGegnerArt = New TGegnerArt Local GegnerArten_WuetenderBauer:TGegnerArt = New TGegnerArt Local Gegner1:TGegner = New TGegner Gegner1.GegnerArt = GegnerArten_Baum Wenn du hingegen ein sehr dynamisches Spiel hast, würde ich dir zu BladeRunners Antwort raten, da du so beispielsweise auch die IDs verändern - und andere Anpassungen vornehmen - kannst. |
||
Programmers dont die. They gosub without return... |
Skabus |
Mi, Jun 08, 2011 10:00 Antworten mit Zitat |
|
---|---|---|
Hey danke für die Ideen, damit kann ich arbeiten.
Ich werd mir alles mal ansehen.Mal schauen was am besten funktioniert für mein Projekt BladeRunner hat Folgendes geschrieben: Was Du - wenn es keine zu komplexen Types mit vielen Subtypes sind - machen kannst wenn es flott gehen soll wäre selbst eine Copy()-Methode zu schreiben: Code: [AUSKLAPPEN] Type Bla
field blub method copy:bla(source:bla) local c:bla = new bla c.bla = source.bla return c end method end type So hatte ich das auch gemacht, aber dann müsste ich ja jedes Mal wenn ich ein neues Attribute zum Type hinzufüge die Copy-Methode anpassen, richtig? So ähnlich hatte ich das nämlich auch schon gemacht, aber genau das wollte ich vermeiden^^" MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
BladeRunnerModerator |
Mi, Jun 08, 2011 13:59 Antworten mit Zitat |
|
---|---|---|
Jap, exakt. BMax kennt leider keinen Coypkonstruktor, daher muss man sich mit diversen Krücklein behelfen. | ||
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 |
Übersicht BlitzMax, BlitzMax NG Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group