Seite 2 von 3

Verfasst: 07.12.2007 20:16
von obar
Sinuskurven kenne ich natürlich schon. Wurde scheinbar von der Schleife etwas verwirrt.

Verfasst: 08.12.2007 10:19
von obar
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...
Habe nun eine Flugbahn eingefügt. Der mover in der Structure funktioniert ebenfalls.
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.

Verfasst: 08.12.2007 12:00
von Laurin
Setzte für n eine natürliche Zahl ein. Je größern n desto weiter rechts ist die Flugbahn.

Verfasst: 08.12.2007 12:48
von obar
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.

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
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.

Verfasst: 10.12.2007 17:04
von Kaeru Gaman
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

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
jeweils die x- und y-differenzen zum nächsten wert:

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
...
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.
;)

Verfasst: 10.12.2007 18:33
von obar
Ich werde es sobald wie möglich testen. Leider komme ich heute nicht mehr dazu.
Werde aber sobald wie möglich Bescheid geben, wenn ich es hinbekommen habe. Danke erstmal. :allright:

Verfasst: 11.12.2007 14:59
von obar
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.

Verfasst: 13.12.2007 15:55
von Kaeru Gaman
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:

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
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:

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
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.

Verfasst: 13.12.2007 16:31
von obar
Danke vielmal :allright:

Dein Erklärungen sind wirklich allerserste Sahne.

Übrigens meinte ich mit den Listen, dass ich 2 Textfiles(2 Listen) generiere
ein Textfile mit den X Koordinaten, dass andere File mit den Y Koordinaten.
Sorry das du noch zusätzliche Arbeit hattest für dein Beispiel mit LL.

Verfasst: 13.12.2007 16:45
von Kaeru Gaman
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.