Flugbahn von Gegnern vorgeben
Habe nun eine Flugbahn eingefügt. Der mover in der Structure funktioniert ebenfalls.Kaeru Gaman hat geschrieben:du könntest in die struct 'enemy' ein feld 'mover' hinzufügen,
damit kann sich dann jeder enemy an einer anderen stelle der flugbahn befinden.
du kannst die flugbahn auch als positionsveränderungen erzeugen,
und dann in die felder speedx/speedy einsetzen anstatt in x/y,
dann kann die selbe flugbahn an unterschiedlichen positionen beginnen usw...
Natürlich startet das Raumschiff nun immer von der gleichen Position. Den Punkt mit
der Positionsveränderung hab ich nicht richtig verstanden. Damit die selbe Flugbahn
an verschiedenen positionen beginnen kann.
Jetzt werde ich wahrscheinlich falsch verstanden.
Ich benutze noch keine Sinuskurve für die Flugbahn.
Ich habe eine kleine Routine ins Programm von Kaeru Gaman eingefügt.
Diese speichert mir die Flugbahn gleich ab.
Der Output dieser Routine sieht so aus.
Diesen Output lese ich dann in meinen Shooter wieder ein.
Die Startposition für die Flugbahn ist dann aber immer dieselbe.
Nun habe ich Kaeru Gaman aber so verstanden, dass es eine Möglichkeit gibt, die Flugbahn trotzdem zu variieren. Mit eben
dieser positionsveränderungen und speedx/speedy. Das ist der Punkt den ich nicht verstanden habe.
Wenn ich diese Punkte mal verstanden habe, kann ich mich auch mal an andere Varianten der Flugbahnberechnung machen.
Ich benutze noch keine Sinuskurve für die Flugbahn.
Ich habe eine kleine Routine ins Programm von Kaeru Gaman eingefügt.
Diese speichert mir die Flugbahn gleich ab.
Der Output dieser Routine sieht so aus.
Code: Alles auswählen
DATA.l -30,-29,-29,-29,-29,-29,-28,-27,-25,-25
DATA.l -23,-21,-19,-15,-14,-13,-8,-7,-5,-4
DATA.l -2,3,5,8,11,13,13,16,18,18
DATA.l 19,21,24,25,28,32,34,36,39,42
DATA.l 45,47,48,52,55,59,60,64,65,69
DATA.l 73,80,80,84,85,88,93,96,101,106
DATA.l 108,111,113,118,121,125,133,136,139,143
DATA.l 144,149,153,154,159,164,166,168,172,175
DATA.l 181,184,186,193,195,199,203,205,207,214
DATA.l 219,223,225,226,230,232,236,237,242,245
DATA.l 247,250,253,257,258,263,265,266,269,270
DATA.l 270,270,270,269,268,268,265,263,260,258
Die Startposition für die Flugbahn ist dann aber immer dieselbe.
Nun habe ich Kaeru Gaman aber so verstanden, dass es eine Möglichkeit gibt, die Flugbahn trotzdem zu variieren. Mit eben
dieser positionsveränderungen und speedx/speedy. Das ist der Punkt den ich nicht verstanden habe.
Wenn ich diese Punkte mal verstanden habe, kann ich mich auch mal an andere Varianten der Flugbahnberechnung machen.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
das ist ja jetzt eine absolute flugbahn, in der du positionen gespeichert hast.
wenn du jetzt anstatt der positionen die differenzen speicherst, hast du ne relative flugbahn.
also bei deinen beispieldata
jeweils die x- und y-differenzen zum nächsten wert:
usw usf
diese werte kannst du dann in SPEEDX und SPEEDY deiner enemies einsetzen,
nachdem du sie auf individuelle startpositionen gesetzt hast.
dann fliegen sie gleichförmige flugbahnen, aber von unterschiedlichen startpunkten aus.

wenn du jetzt anstatt der positionen die differenzen speicherst, hast du ne relative flugbahn.
also bei deinen beispieldata
Code: Alles auswählen
DATA.l -30,-29,-29,-29,-29,-29,-28,-27,-25,-25
DATA.l -23,-21,-19,-15,-14,-13,-8,-7,-5,-4
DATA.l -2,3,5,8,11,13,13,16,18,18
DATA.l 19,21,24,25,28,32,34,36,39,42
DATA.l 45,47,48,52,55,59,60,64,65,69
DATA.l 73,80,80,84,85,88,93,96,101,106
DATA.l 108,111,113,118,121,125,133,136,139,143
DATA.l 144,149,153,154,159,164,166,168,172,175
DATA.l 181,184,186,193,195,199,203,205,207,214
DATA.l 219,223,225,226,230,232,236,237,242,245
DATA.l 247,250,253,257,258,263,265,266,269,270
DATA.l 270,270,270,269,268,268,265,263,260,258
Code: Alles auswählen
DATA.l 1,0, 0,0, 1,2, 3,2, 2,4
DATA.l 4,6, 5,2, 6,6, 3,3
...
diese werte kannst du dann in SPEEDX und SPEEDY deiner enemies einsetzen,
nachdem du sie auf individuelle startpositionen gesetzt hast.
dann fliegen sie gleichförmige flugbahnen, aber von unterschiedlichen startpunkten aus.

Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
So habs nun getestet und eingefügt. Läuft einwandfrei.
Hab noch eine Frage, Ich generiere aus deinem Programm 2 Listen, jeweils eine für die x Koordinaten
und eine für y Koordinaten. Hättest du eine Idee wie ich das schreiben der Differenzen automatisieren könnte?
Es sind ja doch einige Zahlen die bei so einer Flugbahn zusammenkommen.
Hab noch eine Frage, Ich generiere aus deinem Programm 2 Listen, jeweils eine für die x Koordinaten
und eine für y Koordinaten. Hättest du eine Idee wie ich das schreiben der Differenzen automatisieren könnte?
Es sind ja doch einige Zahlen die bei so einer Flugbahn zusammenkommen.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
da würde ich schon mal nur eine einzige liste des typs COORD verwenden,
den typ verwende ich ja auch im originalprog.
...und ob liste oder array.. ich verwende ja n array in meinem beispiel...
letztendlich wird es dir aber wohl nur um DATA-generierung gehen..
wenn ich ein array mit koordinaten habe, automatisiere ich differenzen so:
also einfach die differenz bilden zwischen einem element und dem nächsten...
bei ner liste ist das ein wenig umständlicher, weil man das alte element puffern muss:
außerdem entsteht hier eine abweichung im ersten wertepaar,
weil OldX/Y noch nicht initialisiert ist.
wenns dir aber eh um Data-Generierung geht ist das vernachlässigbar.
Ich würde dir aber grundsätzlich raten, dich auch mal mit arrays auseinander zu setzen.
Arrays und listen haben grundsätzlich verschiedcene Anwendungsgebiete,
man sollte beide beherrschen, wenn man effizient programmieren will.
in diesem fall würde ich eindeutig arrays vorziehen, weil ich so
mehrere gleich lange flugbahnen direkt "nebeneinander" speichern kann.
den typ verwende ich ja auch im originalprog.
...und ob liste oder array.. ich verwende ja n array in meinem beispiel...
letztendlich wird es dir aber wohl nur um DATA-generierung gehen..
wenn ich ein array mit koordinaten habe, automatisiere ich differenzen so:
Code: Alles auswählen
For n=0 to Counter -2
DX = Pos(n+1)\x - Pos(n)\x
DY = Pos(n+1)\y - Pos(n)\y
Debug "Data " + Str(DX) + ", " + Str(DY)
Next
bei ner liste ist das ein wenig umständlicher, weil man das alte element puffern muss:
Code: Alles auswählen
ForEach Pos()
DX = Pos()\x - OldX
DY = Pos()\y - OldY
Debug "Data " + Str(DX) + ", " + Str(DY)
OldX = Pos()\x
OldY = Pos()\y
Next
weil OldX/Y noch nicht initialisiert ist.
wenns dir aber eh um Data-Generierung geht ist das vernachlässigbar.
Ich würde dir aber grundsätzlich raten, dich auch mal mit arrays auseinander zu setzen.
Arrays und listen haben grundsätzlich verschiedcene Anwendungsgebiete,
man sollte beide beherrschen, wenn man effizient programmieren will.
in diesem fall würde ich eindeutig arrays vorziehen, weil ich so
mehrere gleich lange flugbahnen direkt "nebeneinander" speichern kann.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
danke für die blumen.
...du kannst hier ein textfile mit den fortlaufenden werten erzeugen,
also einfach immer abwechselnd DX und DY durch kommata getrennt.
das kannst du dann in den PB-Editor kopieren, und Data.l und zeilenumbrüche per hand einfügen.
du könntest die werte aber auch direkt in eine binäre datei schreiben,
und diese datei mit includebinary in dein prog einfügen.
der möglichkeiten sind viele...
viel spaß beim rumprobieren.
...du kannst hier ein textfile mit den fortlaufenden werten erzeugen,
also einfach immer abwechselnd DX und DY durch kommata getrennt.
das kannst du dann in den PB-Editor kopieren, und Data.l und zeilenumbrüche per hand einfügen.
du könntest die werte aber auch direkt in eine binäre datei schreiben,
und diese datei mit includebinary in dein prog einfügen.
der möglichkeiten sind viele...
viel spaß beim rumprobieren.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.