Bei Geschossen würde ich eine Linked List verwenden. Dann noch eine Structure welche die Daten des Geschosses enthält.
Etwa so:
Code: Alles auswählen
structure geschoss_struc
pos_x.w
pos_y.w
graphic.w
damage.w
speed_x.w
speed_y.w
abs_speed.w
endstructure
newlist bullet.geschoss_struc()
Wenn du jetzt schießt, einfach ein Element der Liste hinzufügen und die Eigeneschafen wie Pos_x, Pos_y, Speed_x, Speed_y und so setzen. Dann im Programmcode weiter unten eine Schleife welche jedes Listenelement durchläuft und bewegt:
Code: Alles auswählen
foreach bullet()
bullet()\pos_x = bullet()\pos_x + bullet()\speed_x
bullet()\pos_y = bullet()\pos_y + bullet()\speed_y
next bullet()
Dabei ist zu berücksichtigen, dass der Speed so gesetzt ist, dass die Richtung auch passt. Also, wenn der Schuss nach links gefeuert wird, dass dann speed_x = abs_speed und speed_y = 0 wird. (abs_speed enthält den gesamten Speed des Geschosses ohne Richtung. Also etwa 20.)
Beim Schuss nach oben muss dann speed_x = 0 sein und speed_y = -abs_speed.
Wenn du Schüsse hast, welche im 360 Grad winkel beliebig jeden Winkel annehmen können, musst du das per SInus, Cosinus und co. errechnen, welchen Wert Speed_x und Speed_y annehmen bei entsprechendem WInkel. Dabei hilft dir jetzt die Nutzung von abs_speed. Denn du musst den Vektor zerlegen in X und Y Richtung, und das geht dann wenn man die gesamtgeschwindigkeit kennt und den Winkel.
Mit dieser Formel kann man den Speed_x berechnen:
Code: Alles auswählen
bullet()\speed_x = (Cos(2 * 3.14 * ##WINKEL## / 360) * bullet()\abs_speed)
WICHTIG: ##WINKEL## muss natürlich durch den eigenen Winkel ersetzt werden. ALso durch den Schusswinkel des Geschosses.
Für Y rechnet man den Speed übrigends auch so aus wie oben, nur anstelle von Cosinus muss man Sinus nehmen.
Ich hoffe das hilft dir etwas mit den Geschossen. So kann man das zumindest machen und dann die Geschwindigkeit für die einzelnen Richtungen errechnen. Vektor zerlegen in X und Y und den Speed zur Position hinzufügen.
// Alle Codes sind nicht getestet sondern aus dem "Stand" aufgeschrieben. Schreibfehler können somit vorhanden sein.