Gegner Type(s)?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Megamag

Betreff: Gegner Type(s)?

BeitragFr, Aug 14, 2009 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Es geht hier um eine Frage, die ich mir gerade stelle. Soll ich für jeden Gegner einen neuen Type erstellen, oder reicht ein Type mit Namen "Gegner", wo ich dann alle verschiedenen Gegner einbaue? Es geht mir halt um die Einfachheit und um die Performance. Ich weiß nicht, wieviel Speicher so viele verschiedene Types ziehen und man könnte leicht jeden Gegner im SPiel ansprechen mit einer einzigen Schleife, da es ja nur einen Gegner-Type gibt. Allerdings muss es wohl sehr schwierig sein, alle Gegnerverhalten in eine Funktion mit einem Type einzuprogrammieren... Was sagt ihr dazu?

Nicdel

BeitragFr, Aug 14, 2009 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich benutze immer einen Type mit einem Field namens "art" oder "typ". In einer Select...Case-Abfrage werden dann speziefische Aktionen durchgeführt.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Smily

BeitragFr, Aug 14, 2009 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach eine variable für den typ und rufe per select-case je nach typ die entsprechende funktion für das verhalten auf.

edit: Nicdel war schneller.
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Megamag

BeitragFr, Aug 14, 2009 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Jap, hatte ich mir auch so gedacht. Aber stelle dir mal 50 verschiedene Gegner mit Grundverschiedenen Aktionen vor. Würde das nicht ziemlich unübersichtlich werden?

Smily

BeitragFr, Aug 14, 2009 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
und 50 Types wären dann wohl übersichtlicher?

Wenn du etwas in dieser größenordnung realisieren möchtest, solltest du eher bmax verwenden, das hat richtige OOP und kann auch vererbungen, was in deinem fall jetzt die ideale lösung wäre
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Megamag

BeitragFr, Aug 14, 2009 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber ich kann weder bmax, noch kann bmax 3D. Außerdem habe ich bereits die Engine für das SPiel fertiggebastelt. Naja, muss ich halt schauen, was übersichtlicher ist.

Tankbuster

BeitragFr, Aug 14, 2009 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Mehrere Types. Wenn du einen bestimmten Gegner ansprechen willst, müsstest du ja trotzdem noch alle durchgehen. Zum beispiel soll ein gegner leben verlieren, wenn eine Bedingung erfüllt ist:

Code: [AUSKLAPPEN]

For G.Gegner=Each Gegner
If G\bedingung=1 Then G\life=G\life-1
Next


Du müsstest mit deiner Idee schreiben

Code: [AUSKLAPPEN]
For G.Gegner=First Gegner ;First oder each... <_<
For i=1 to 10
If G\bedingung[i]=1 Then G\life[i]=G\life[i]-1
Next
Next


Also nicht wirklich vorteilhaft... Wink
Twitter
Download Jewel Snake!
Windows|Android
 

BIG BUG

BeitragFr, Aug 14, 2009 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Benutze einfach einen einzigen Type der alle Arten von Objekten enthält.
Welche Arten von Objekten vorhanden sind und ihre statischen Attribute werden in einem zweiten Type gespeichert.
z.B.
tDef wäre der Type mit Objektdefinitionen
tObj wäre dann der Type der alle deine Objekte enthält

In tObj gibt es dann eine Referenz auf tDef. Jede Objektdefinition erhält eine eindeutige ID mit der diese identifiziert werden kann.

Code: [AUSKLAPPEN]

Type tDef
Field ID
Field img, maxHP, file
End Type

Type tObj
Field def.tDef
Field xPos#, yPos#, curHP, aniState
End Type tObj



Beim Update der Objekte benutzt Du dann Select Case auf die ID um für unterschiedliche Objekte unterschiedliches Verhalten zu programmieren...

Für Effekte und Partikel sollte man aber dann einen weiteren Type verwenden.
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Megamag

BeitragFr, Aug 14, 2009 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe deine Idee aber nicht so richtig, wie ich es anwenden soll.
Wie muss ich dann die Types ansprechen? Und was für ein Type muss bei
einem neuen Gegner erstellt werden? Ich blicke da gerade nicht so durch...

ToeB

BeitragFr, Aug 14, 2009 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Types werden ja wie werte in Variablen gespeichert. Nur das hinter den VAriablen nur ein Typename stehen muss, getrennt mit einem Punkt. Und da du mit Filed ja nur Variablen angibst, kannst du auch diese Art von Variablen benutzen. Also wenn du z.B. möchtest (cih nehm das beispiel GUI), dass buttons auf windows gesetz werden. Dann hast du ja den Type windows und den TYpe buttons. Jetzt gibst du einfach bei Bottons ein neues File ein : File w.window. Wenn du jetzt wissen willst, auf welchem Fenster der Button sich befindet, einfach handle.window=button\w. Wenn du auf die Fenstergröße zugreifen möchtest, machst du das so : size = button\w\size_x. Und dann kann window wieder ein Field beihalten, welches auch durch den button abgefragt werden kann usw...

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Megamag

BeitragFr, Aug 14, 2009 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe jetzt mal zwei types erstellt:
BlitzBasic: [AUSKLAPPEN]
;Enemy
Type Enemy
Field ID
End Type

;Testy
Type Testy
Field ent
Field HP
Field MP
Field EP
Field GOLD
Field debug
Field dat.Enemy
End Type


Enemy ist der Type, der die ID der Gegner beinhaltet. Testy ist ein erstellter Testgegner.
Hier ist die Create-Funktion:
BlitzBasic: [AUSKLAPPEN]
Function CreateEnemy(ID,x#,y#,z#,ent)

Select ID

Case 1 ;Testy
t.testy=New Testy
t\ent=CopyEntity(ent)
ScaleEntity t\ent,.05,.05,.05
PositionEntity t\ent,x,y,z

EntityType t\ent,C_ENEMY
EntityRadius t\ent,2,2.5

t\debug=CreateSphere(8,t\ent)
ScaleEntity t\debug,2,2.5,2,1
EntityColor t\debug,255,0,0
EntityAlpha t\debug,0.5

t\dat\ID=ID

End Select
End Function

Aber da kommt immer Memory Accsess Violation. Vermutlich wegen dem "t\dat\ID=ID". Aber das müsste doch korrekt sein oder?

(vielleicht sollte das mal in Beginners Corner oder so verschoben werden. Ist ja eigentlich keine Allgemein-Diskussion mehr...)

Xeres

Moderator

BeitragFr, Aug 14, 2009 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Function CreateEnemy(ID.Enemy,x#,y#,z#,ent)

Du musst den Type auch mit angeben, sonst ist's Int und verwirrt BB Wink

Edit2:
Streich das Oben... es soll ja Int sein...
Aber hast du das Objekt "t\dat"mit "new Enemy" auch erstellt? sonst ist es Null.

Edit:
Älteres Beispiel
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Megamag

BeitragFr, Aug 14, 2009 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ihr könnt mich für blöd halten, aber ich versteh's immer noch nicht.
Das ganze ist mir echt zu kompliziert. Egal, wie sehr ich drüber nachdenke,
ich kann da keinen klaren Faden fassen. Ich habe echt keine Ahnung wie ich was
wo angeben muss, damit das hinhaut. Sad

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group