Zielzuweisung für Raketen (TYPE)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Iguan

Betreff: Zielzuweisung für Raketen (TYPE)

BeitragMo, Apr 10, 2006 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
halli hallo!
Viele denken jetzt wohl... Moment mal! Dieses Thema hatten wir doch schon mindestens 1000 mal! Aber ich habe bei der Forensuche nur Beiträge gefunden, die Die Steuerung von zielsuchenden Raketen beschreiben.
Ich habe aber ein Problem mit der Zielzuweisung von zielsuchenden Raketen.

in meinem Space Shooter habe ich ein Type mit Gegnern..

..etwa so:

Code: [AUSKLAPPEN]

For Gegner = Each GegnerWerte
   Gegner\X = Gegner\X - 1
   ;....
Next


.. und ein Type mit Raketen..

etwa so:
Code: [AUSKLAPPEN]

For Schuss = Each SchussWerte
   Schuss\Istwinkel# = Schuss\Istwinkel# + ....
   .... if Schuss\Istwinkel# < Schuss\Sollwinkel# then....
   ...
Next



Nun möchte ich, dass sich jede Rakete ein Ziel aussucht, und dann ständig dieses verfolgt.
Die Steuerung der Rakete läuft ohne Probleme.. aber die Zielzuweisung eben nicht Rolling Eyes
wie macht man das?
Bisher hatte ich es so gemacht, dass die Koordinaten des N-ten Gegner im GegnerType, An der N-ten Position in Arrays mit den Namen
Dim RaketenZielX(10)
Dim RaketenZielY(10)
gespeichert wurden.

Aber dies gab Probleme, wenn ich einen neuen Gegner erstellte oder einen Gegner löschte... weil sich dann alles um eine Position verschob, und die Raketen plötzlich das Ziel wechselten.

Wie könnte man dies sonst lösen?


Recht herzlichen dank! Wink [/code]

D2006

Administrator

BeitragMo, Apr 10, 2006 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum machst du keinen Raketen Type?

Code: [AUSKLAPPEN]
Type raketen
        Field x#,y#,...
        Field ziel.GegnerWerte
End Type


Dann kannst du wie hier als Zielvariable den entsprechenden Type des Gegner angeben. Zugriff dann so:

Code: [AUSKLAPPEN]
g.GegnerWerte = First GegnerWerte
r.raketen = New raketen
r\ziel = g
;Beispiel für Abruf:
r\ziel\x = 483
;halt abhängig was für Fieldes der Gegnertype hat.


MfG
D2006

EDIT: hoppla, du hast ja einen Raketentype. Sorry, überlesen. Mein Ansatz sollte trotzdem helfen.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
  • Zuletzt bearbeitet von D2006 am Mo, Apr 10, 2006 20:06, insgesamt einmal bearbeitet

SoNenTyp

BeitragMo, Apr 10, 2006 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Immer wenn sich etwas an einem Gegner aendert überprüfen ob er ein Ziel ist. Wenn ja, einfach die Rakete entsprechend Reaigieren lassen.
Gruss Der Typ.

User posted image
 

HW

BeitragMo, Apr 10, 2006 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ließe sich schon mal einfach lösen, der Rakete ein neues Ziel zuzuweisen, falls das aktuelle Ziel zerstört wurde. In der Hauptschleife ungefähr:
BlitzBasic: [AUSKLAPPEN]
If r/ziel.gegner=Null Then
r/ziel.gegner=After r/ziel.gegner
EndIf

Ich habe übrigens gegner statt GegnerWerte benutzt. Müsstest du dann anpassen.

Iguan

BeitragMo, Apr 10, 2006 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
@ D2006:
Code: [AUSKLAPPEN]

r\ziel\x

geht das? ich meine mit zwei Backslashes? Das kapier ich irgendwie nicht! Rolling Eyes
bisher hatte ich jeweils nur ein Backslash benötigt.

Variable\Untervariable

Kenne in diesem Falle wohl noch nicht alle Tricks mit den Types!
Könntest du mir das erklären? Wie kann ich mir das vorstellen? Bisher stellte ich mir bei Types wie Schubladen einer Komode vor:

Komode = Variablen
Schubladen = Untervariablen (Field)

Vielen dank!


PS:

Meine Types:

Code: [AUSKLAPPEN]

Type SchussWerte
  Field X
  Field Y
  Field Staerke
  Field Istwinkel#
  Field SollWinkel#
  Field Geschw#
End Type
Global Schuss.SchussWerte

Type GegnerWerte
  Field X
  Field Y
  Field Energie
  Field ID
End Type
Global Gegner.Gegnerwerte
 

HW

BeitragMo, Apr 10, 2006 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Da das Ziel ja ein Type (Und zwar GegnerWerte) ist, geht das mit den zwei Backslashes. Du musst bei dem Schusstype noch das Field ziel.gegnerwerte einfügen.

D2006

Administrator

BeitragMo, Apr 10, 2006 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Stell dir ne Minikomode in der Schublade der Komode vor.

Allerdins ist r\ziel nur eine "Referenz" auf einen anderen Type, also auf eine Gegnertype. Ist dann quasi ne Abkürzung um darauf zuzugreifen.

Beispiel:

Code: [AUSKLAPPEN]
Type a
Field x
End Type

Type b
Field t.a
End Type


Im zweiten Type habe ich als ein Field den ersten Typ.
Nun kann ich einfach einen Type a erstellen (test.a = new a). Das gleiche für Type b (test2.b = new b). Nun kann ich b\t den zuerst erschaffenen Type zuweisen: (b\t = test). Jetzt habe ich 2 Möglichkeiten die test Instanz aufzurufen: einmal normal über a\x und einmal über b\t\x.

Wenn du das nicht so verstehst, kannst du es auch gerne nochmal in TheShadows Type Tutorial nachlesen, er behandelt Types in Types dort auch.

MfG
D2006
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Iguan

BeitragMo, Apr 10, 2006 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Coool! Cool das wusste ich gar nicht das dies möglich ist! Hab zwar nicht alles begriffen, aber ich gehe nochmals über die Bücher! Wink

Vielen Dank an euch zwei!!!!!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group