Frage zum Verwalten von Schiffen und Schüssen in Variablen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Backbuffer

Betreff: Frage zum Verwalten von Schiffen und Schüssen in Variablen

BeitragSo, Feb 03, 2008 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo allerseits. Ich programmiere gerade einen 360 Grad Spaceshooter und habe allgemeine Fragen zur Verwaltung der Schiffe und Schüsse von Spieler und Gegner (auch im Hinblick auf "sauberes Programmieren").

1. Wie (type oder array?) verwalte ich am besten...
... Variablen, die für jedes Schiff individuell sind (z.B. X-/Y-Position)?
...Variablen, die für eine Gruppe von Schiffen gelten (z.B. maximale Geschwindigkeit)?
Edit:
... die Grafiken für die Schiffe/Schüsse

2. Kann ich für z.B. Schüsse des Gegners und des Spielers auch ein Type verwenden?
Wenn ja, wie kann ich unterscheiden ob es sich um Schüsse des Spielers oder des Gegners handelt?



Zur näheren Erläuterung:
Im Moment verwende ich für die individuellen Variablen Types und für die Variablen, die für eine Gruppe von Schiffen gelten Arrays. Allerdings habe ich Probleme z.B. bei der Kollisionsabfrage zwischen Spielerschüssen und Gegnerschüssen zu unterscheiden.

Ich denke, dass die Fragen für erfahrene Programmierer leicht zu beantworten sind, aber mir bereiten sie gerade echt Kopf zerbrechen. Bin für jede Hilfe dankbar.
  • Zuletzt bearbeitet von Backbuffer am So, Feb 03, 2008 23:12, insgesamt einmal bearbeitet
 

Gast

BeitragSo, Feb 03, 2008 21:30
Antworten mit Zitat
zu 2. :ja, du machst einmal gegnerschuss.schuss und einmal schuss.schuss

For gegnerschuss.schuss = Each schuss

Next
For schuss.schuss = Each schuss

Next

The_Nici

BeitragSo, Feb 03, 2008 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
1.Ich würde Types nehmen. Für alles.

2.Du kannst eine Erkennungsnummer in einem Type-Field speichern. So weisst du woher der Schuss stammt.
 

Backbuffer

BeitragSo, Feb 03, 2008 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
flitztuete95 hat Folgendes geschrieben:
zu 2. :ja, du machst einmal gegnerschuss.schuss und einmal schuss.schuss

For gegnerschuss.schuss = Each schuss

Next
For schuss.schuss = Each schuss

Next


So habe ich mir das bis jetzt auch gedacht (hatte player.shot und enemy.shot). Allerdings schien es mir so, dass wenn ich die Schüsse über each shot anwähle, dass dann kein Unterschied gemacht wird zwischen player.shot und enemy.shot.
 

Gast

BeitragSo, Feb 03, 2008 21:36
Antworten mit Zitat
Das lässt sich testen.
Gib mit ein paar minuten...
  • Zuletzt bearbeitet von Gast am So, Feb 03, 2008 21:41, insgesamt einmal bearbeitet

The_Nici

BeitragSo, Feb 03, 2008 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Es heisst jeden Schuss. Da gibts nichts zu testen. Egal ob der Schuss Heinz oder Herbert heisst, er ist ein Schuss.
 

Gast

BeitragSo, Feb 03, 2008 21:40
Antworten mit Zitat
Stimmt: Getestet mit dem Code: [AUSKLAPPEN]

Type XY
Field XYX
End Type

Global XX.XY,YY.XY

XX.XY = New XY
XX\XYX = 1

YY.XY = New XY
YY\XYX = 222

For XX.XY = Each XY
I = I +1
Next
Print I

Input


I ist = 2, daran sieht man es.
 

Backbuffer

BeitragSo, Feb 03, 2008 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, ich glaube, das Beispiel klappt nur, weil du nur jeweils ein Objekt hast. Ich glaube wenn du z.B. jeweils 10 nimmst, funktioniert das nicht mehr.
 

BIG BUG

BeitragSo, Feb 03, 2008 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Schreibe zur Zeit ja sporadisch an einem Tutorial zum Aufbau eines Spiels generell, wo das dann auch vorkommt.

The_Nici hat mit seiner Aussage recht, Du solltest für Deine Fragestellung komplett Types verwenden.

Deine Schiffe mit den aktuellen Daten definierst Du einfach so:
Code: [AUSKLAPPEN]

;Objekttype
Type tShip
   Field def.tDef ;Definition, siehe unten
   Field x, y
   Field owner
   ...
EndType


Die statischen Attribute, also Variablen, die für alle Schiffe eines Typs gelten dann wie folgt:
Code: [AUSKLAPPEN]

;Definitionstype
Type tDef
   Field defID
   Field maxSpeed, maxShield
   Field image
   ...
EndType


Schüsse kannst Du auch so definieren. Beachte hierbei das Feld "owner" im oberen Code, da speicherst Du dann einfach rein, von wem der Schuss abgefeuert wurde. So weisst Du immer was zu wem gehört. Also z.B. -1 für KI, 0 für Global, 1-n für die Spielernummer bei Multiplayer

Um jetzt feststellen, um welchen Schiffs- oder Schusstyp es sich genau handelt kannst Du dann noch Konstanten definieren, die in das Feld defID im Definitionstype gestellt werden:

Code: [AUSKLAPPEN]

Const SHIP_PLAYER = 1
Const SHIP_PIRATE_VIPER = 2
Const SHIP_PIRATE_BATTLESTAR = 3
Const SHIP_PIRATE_CORVETTE = 4


Über "IF ship/def/defID = SHIP_PLAYER Then" könntest Du dann z.B. alle Spielerschiffe abfragen usw.
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)
 

Backbuffer

BeitragSo, Feb 03, 2008 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für die ausführliche Antwort Big Bug. Das muss ich erst mal "verdauen".

Aber eine Frage stellt sich noch. Wie sollte ich am besten die 360 Bilder eines Schiffes speichern. Bis jetzt sind die in einem Dim festgelegt. Ist das OK?

BladeRunner

Moderator

BeitragSo, Feb 03, 2008 23:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Speicher blos nicht 360 Bilder, das kostet nur massig speicher und man sieht es nicht.
Wie wäre es mit 10°-Schritten, macht 36 Bilder, das sind immer noch mehr als genug. Und die speichere in einem Array.
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
 

BIG BUG

BeitragSo, Feb 03, 2008 23:19
Antworten mit Zitat
Benutzer-Profile anzeigen
36 anstatt 360 Bilder reichen vermutlich auch aus. Bei kleineren Drehschritten sieht man eh kaum mehr einen Unterschied.

Ansonsten ist dafür DIM schon ok. Alternativ gibts auch noch BlitzArrays (mit[]) die lassen sich sogar in Types reinhängen(siehe in Onlinehilfe 2D-Tutorials -> The Shadow -> 5. Undokumentierte Features
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

BladeRunner

Moderator

BeitragSo, Feb 03, 2008 23:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach ja: Images würde ich - falls von mehreren Gegnern benutzt - nicht im Type speichern, denn die Daten werden sonst unter Umständen mehrfach abgelegt.
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
 

Backbuffer

BeitragSo, Feb 03, 2008 23:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, werde mal versuchen, das umzusetzen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group