dynamisch mit Types
Übersicht

shark95Betreff: dynamisch mit Types |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Programmierer!
Ich bin gerade dabei ein kleines Panzerspiel zu programmieren. Zurzeit hab eich 3 Types: einmal der Panzer selbst (also nur das Fahrzeug), dann das Schussgerät, und der Schuss selber. Was ich jetzt nicht verstehe, wie ich die 3 Sachen möglichst dynamisch verbinden kann. Zurzeit habe ich z.B. im Schussgerat-Type einfach die x- und y-Werte des Panzertypes übergeben indem ich zuerst ein Objekt von Panzer erstellt haben und dann direkt im Code Panzer1.x übergeben habe. Also extrem umständlich. So ich hoffe ihr könnt mir da irgendwie helfen. Danke |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das einfachste ist im Panzer ein Field vom Type Schussgeraet.
Den Schuss brauchst du ja nicht zu verbinden, der wird nur abgeschossen und dann automatisch aktualisiert ohne irgend einen zusammenhang zum Panzer / Schussgeraet. Ich nehme an du hast im Schuss also in der Klasse eine Liste die alle Objekte von diesem Typ speichert die existieren oder? Für den Update in der Mainloop mein ich. (wenn nicht gibt es einige Tutorials die zeigen wie man das am geschicktesten macht, denn BM hat keine Objektlisten mehr wie das in Blitz3D / BlitzPlus der Fall war, die musst du selbst einbauen wenn du sie brauchst) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
shark95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die schnelle Antwort.
Ist es also möglich Types in Types zu erstellen? Wenn ja wie greife ich dann auch die Variablen des Übergeordneten type zu?! Danke |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Möglich weiss ich net, ging mal bin mir aber net sicher das es noch geht.
Aber es ist auch garnicht nötig, sowas zu machen. Als einfaches beispiel Code: [AUSKLAPPEN] superstrict Type Waffe field schaden:int End Type Type Panzer field name:string field waffe:Waffe field health:int method fire(target:Panzer) target.damage(self.waffe.schaden) end method method damage(schaden:int) self.health :- schaden if self.health < 0 print self.name + " wurde zerstört" end method end type |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
shark95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke, jedoch funktioniert der Code bei mir nicht. Hat jemand nen ausführbaren Code, der diese Beispiel verdeutlicht (irgendwie versteh ich das noch nicht ganz).
Danke |
||
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Musst doch nur den Code von Dreamora etwas verändern.
Ein typischer (vereinfachter) OGame-Kampf: Code: [AUSKLAPPEN] SuperStrict
Type Waffe Field schaden:Int Method SetDamage(newDmg:Int) schaden = newDmg End Method End Type Type Panzer Field name:String Field waffe:Waffe Field health:Int = 100 Method fire(target:Panzer) target.damage(self.waffe.schaden) End Method Method damage(schaden:Int) self.health :- schaden If self.health < 0 Print self.name + " wurde zerstört" EndIf End Method Method GetHealth:Int() Return health End Method Method SetWeapon(weap:Waffe) Self.waffe = weap End Method End Type Global SuperWaffe:Waffe = New Waffe Global SchwacheWaffe:Waffe = New Waffe SuperWaffe.SetDamage(30) SchwacheWaffe.SetDamage(10) Global instanz1:Panzer = New Panzer Global instanz2:Panzer = New Panzer instanz1.name = "Panzer 1" instanz2.name = "Panzer 2" instanz1.SetWeapon(SuperWaffe) instanz2.SetWeapon(SchwacheWaffe) Print "Panzer 1: " + instanz1.GetHealth() + "LP" Print "Panzer 2: " + instanz2.GetHealth() + "LP" While instanz1.GetHealth() > 0 And instanz2.GetHealth() > 0 Print "" Print "Kampf beginnt" instanz1.Fire(instanz2) instanz2.Fire(instanz1) Print "Panzer 1: " + instanz1.GetHealth() + "LP" Print "Panzer 2: " + instanz2.GetHealth() + "LP" Wend End |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
shark95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen DAnk!
Aber kann man das nicht so machen, dass ich vom untergeordneten Objekt auf das Übergeordnete zugreifen kann. Mal folgendes Beispiel: Ich hab nen Type Panzer, der besitzt x und y Koordinate. Dann gibts noch den Type Waffe, der auch x und y Koordinaten hat, diese muss aber ständig mit den Koordinaten des jeweiligen Panzers abgeglichen werden. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und wo ist das problem? self.waffe.x = self.x; self.waffe.y = self.y wenn waffe ein field in type panzer ist und du auf einem panzer objekt bist. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
shark95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ah ok jetzt hab ichs gecheckt ![]() Danke |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@shark95
du kannst ja wenn das Projektil erstellt wird , dieser Struktur den Panzer übergeben . Wenn das Projektil aufprallt kannste dann direkt dem Panzer der es abgeschossen hat Punkte geben oder so . Ich denke darum ging es dir . |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group