hallo erstmal ich bin neu hier, ich hab mir vor 3 Wochen Gm lite heruntergeladen und kenn mich mit skripten nich so gut aus.
Also ich erstell grad mein 2. Spiel, das is ein 2d topdown Schooter. Spielprinzip: es handelt sich um große Maps auf denen feindliche Schiffe lauern, welche man mit dem eigenen Schiff und verschiedenen Waffen bekämpfen kann. Des weiteren gibt es für den Feind und den Player zusammenhängende Objekte mit den jeweiligen Sprites (die sprites haben auch entsprechende Kollisionsmasken), zb. wird man am Heck getroffen verlangsamt sich das Schiff. Als Letztes ist noch zu erwähnen das der Feind ab einer bestimmten Reichweite auf einen zufliegt, wenn er noch näher kommt fängt er an zu schießen und wenn er ganz nah ist dann stoppt er (er soll einen ja nicht rammen) schiesst aber weiter. ->das funktioniert so weit auch bestens
soweit erst mal zur Erklärung des Spiels,
DAS PROBLEM: wenn der Feind auf den letzten Radius Trifft (wenn er ganz nah ist) und Stoppt, dann knallen alle Kolisionsmasken auf die Unsichtbare Linie welche den innersten Radius beschreibt, andersgesagt sie schieben sich ineinander, das sieht aus wie bei nem Chrashtest gegen ne unsichtbare Mauer. Genauso verhält es sich wenn der Feind auf nen Asteroiden stösst.
Achso und: Beim erstellen der Karte setze ich nun die Feindobjekte zusammen, so dass es wie ein zusammenhängendes Schiff aussieht, ich verwende bei jedem Feind Objekt im Step Evend volgendes Execute skript :
image_angle=point_direction(x,y,Player.x,Player.y)
if(distance_to_point(Player.x,Player.y)<=100)
{speed=0}
if(distance_to_point(Player.x,Player.y)<=500 and distance_to_point(Player.x,Player.y)>100)
{direction=point_direction(x,y,Player.x,Player.y)
move_towards_point(Player.x,Player.y,2)}
if (distance_to_point(Player.x,Player.y)>505)
{speed=0}
hab mir gedacht das man das Problem lösen könnte indem man nur ein Feindobjekt dem Spieler folgen lässt und die anderen Feindojekte folgen dann diesem erstem Feindobjekt, oder dass das man einen zusätzlichen Code mit position Meeting einfügen könnte sodass sich die objekte wieder ausrichten, oder dass man irgentwie die Mitte des sprites die Befehle ausführen lässt also quasi so:
if (?mitte des Sprites?)(distance_to_point(Player.x,Player.y)>505)
{speed=0}
oder irgenteinene andere Lösung, wie gesagt ich bin ein Anfänger und hab nur die Lite Version, bin dankbar für alle Vorschläge
ps. echt tolles Forum hat mir schon viel weitergeholfen
Also ich erstell grad mein 2. Spiel, das is ein 2d topdown Schooter. Spielprinzip: es handelt sich um große Maps auf denen feindliche Schiffe lauern, welche man mit dem eigenen Schiff und verschiedenen Waffen bekämpfen kann. Des weiteren gibt es für den Feind und den Player zusammenhängende Objekte mit den jeweiligen Sprites (die sprites haben auch entsprechende Kollisionsmasken), zb. wird man am Heck getroffen verlangsamt sich das Schiff. Als Letztes ist noch zu erwähnen das der Feind ab einer bestimmten Reichweite auf einen zufliegt, wenn er noch näher kommt fängt er an zu schießen und wenn er ganz nah ist dann stoppt er (er soll einen ja nicht rammen) schiesst aber weiter. ->das funktioniert so weit auch bestens
soweit erst mal zur Erklärung des Spiels,
DAS PROBLEM: wenn der Feind auf den letzten Radius Trifft (wenn er ganz nah ist) und Stoppt, dann knallen alle Kolisionsmasken auf die Unsichtbare Linie welche den innersten Radius beschreibt, andersgesagt sie schieben sich ineinander, das sieht aus wie bei nem Chrashtest gegen ne unsichtbare Mauer. Genauso verhält es sich wenn der Feind auf nen Asteroiden stösst.
Achso und: Beim erstellen der Karte setze ich nun die Feindobjekte zusammen, so dass es wie ein zusammenhängendes Schiff aussieht, ich verwende bei jedem Feind Objekt im Step Evend volgendes Execute skript :
image_angle=point_direction(x,y,Player.x,Player.y)
if(distance_to_point(Player.x,Player.y)<=100)
{speed=0}
if(distance_to_point(Player.x,Player.y)<=500 and distance_to_point(Player.x,Player.y)>100)
{direction=point_direction(x,y,Player.x,Player.y)
move_towards_point(Player.x,Player.y,2)}
if (distance_to_point(Player.x,Player.y)>505)
{speed=0}
hab mir gedacht das man das Problem lösen könnte indem man nur ein Feindobjekt dem Spieler folgen lässt und die anderen Feindojekte folgen dann diesem erstem Feindobjekt, oder dass das man einen zusätzlichen Code mit position Meeting einfügen könnte sodass sich die objekte wieder ausrichten, oder dass man irgentwie die Mitte des sprites die Befehle ausführen lässt also quasi so:
if (?mitte des Sprites?)(distance_to_point(Player.x,Player.y)>505)
{speed=0}
oder irgenteinene andere Lösung, wie gesagt ich bin ein Anfänger und hab nur die Lite Version, bin dankbar für alle Vorschläge
ps. echt tolles Forum hat mir schon viel weitergeholfen