Frage zum Verwalten von Schiffen und Schüssen in Variablen
Übersicht

BackbufferBetreff: Frage zum Verwalten von Schiffen und Schüssen in Variablen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es heisst jeden Schuss. Da gibts nichts zu testen. Egal ob der Schuss Heinz oder Herbert heisst, er ist ein Schuss. | ||
Gast |
![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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) |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke, werde mal versuchen, das umzusetzen. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group