Hiho liebe Community 
Euch stört es auch, wenn eure Gegner danebenschießen, nur weil die Kugeln durch die Gravitationskräfte nach unten gezogen werden? Und gerade fliegende Schüsse sehen einfachSch... nicht gut aus? Dann hab ich hier DIE Lösung, sowohl für Pro/Registriert als auch Lite/Unregistriert (Also auch GM6 und GM7)! 
dirgrav ist ein einfacher Script, bei der man nur Start, Ziel, Geschwindigkeit und die Gravitation angeben muss, und schon liefert es euch die Richtung zurück, bei der es das Ziel treffen wird.
Leider ist das ganze ein wenig (=kaum, aber eventuell merkbar und vllt _einer der Gründe_, warum euer Spiel eventuell langsamer läuft als gewollt) Rechenaufwendig, also mit Vorsicht zu genießen! (= nicht 20 mal pro Step, bitte
)
Ein paar Daten:
scr_dirgrav(x1,y1,x2,y2,speed,gravity,[stepsize],[accuracy])
x1,y1 - Start und x2,y2 - Ziel.
speed,gravity - Gravitation und Geschwindigkeit des Geschosses.
[stepsize] (optional) - Die Größe der Schritte, die er prüft, falls das Geschoss nicht trifft; für den nächsten Durchgang (Standart: 10).
[accuracy] (optional) - Wie viel Pixel "Freiraum" das Geschoss hat - große Zahl = ungenau (Standart: 10).
Wichtig! Wenn das Geschoss nicht treffen kann, wird -1 zurückgegeben, ansonsten die Richtung, also eine Zahl zwischen 0 und 360.
Download:
gm6-Datei mit Beispiel: dirgrav.zip
gml-Datei (nur Script): scr_dirgrav.zip
Und hier als Text zum kopieren:
Spoiler anzeigen
Alles anzeigen
Gruß, euer kopierjunge

Euch stört es auch, wenn eure Gegner danebenschießen, nur weil die Kugeln durch die Gravitationskräfte nach unten gezogen werden? Und gerade fliegende Schüsse sehen einfach



Leider ist das ganze ein wenig (=kaum, aber eventuell merkbar und vllt _einer der Gründe_, warum euer Spiel eventuell langsamer läuft als gewollt) Rechenaufwendig, also mit Vorsicht zu genießen! (= nicht 20 mal pro Step, bitte


scr_dirgrav(x1,y1,x2,y2,speed,gravity,[stepsize],[accuracy])
x1,y1 - Start und x2,y2 - Ziel.
speed,gravity - Gravitation und Geschwindigkeit des Geschosses.
[stepsize] (optional) - Die Größe der Schritte, die er prüft, falls das Geschoss nicht trifft; für den nächsten Durchgang (Standart: 10).
[accuracy] (optional) - Wie viel Pixel "Freiraum" das Geschoss hat - große Zahl = ungenau (Standart: 10).
Wichtig! Wenn das Geschoss nicht treffen kann, wird -1 zurückgegeben, ansonsten die Richtung, also eine Zahl zwischen 0 und 360.

gm6-Datei mit Beispiel: dirgrav.zip
gml-Datei (nur Script): scr_dirgrav.zip

GML-Quellcode
- // scr_dirgrav(x1,y1,x2,y2,speed,gravity,[stepsize],[accuracy])
- // returns direction or -1 if not possible
- var x1,y1,x2,y2,spd,grav,step,acc;
- var len,dir,dir2,xx,yy,vspd,hspd,lastlen;
- x1 = argument0;
- y1 = argument1;
- x2 = argument2;
- y2 = argument3;
- spd = argument4;
- grav = argument5;
- if (argument6 = 0) {step = 10;} else {step = argument6;}
- if (argument7 = 0) {acc = 10;} else {acc = argument7;}
- dir = point_direction(x1,y1,x2,y2);
- len = point_distance(x1,y1,x2,y2);
- dir2 = dir;
- repeat (30) {
- hspd = lengthdir_x(spd,dir2);
- vspd = lengthdir_y(spd,dir2);
- xx = x1; yy = y1;
- while (1) {
- lastlen = point_distance(xx,yy,x2,y2);
- vspd += grav;
- xx += hspd;
- yy += vspd;
- if (point_distance(xx,yy,x2,y2)<=acc) {return dir2;}
- if (point_distance(xx,yy,x2,y2) > lastlen) {
- if (dir < 90) || (dir > 270) {
- if (yy>y2) {
- step *= 1.5;
- if (dir < 90) {dir2 = min(89.9,dir2+step);}
- else {dir2 += step;}
- } else {step *= 0.5; dir2 -= step;}
- } else {
- if (yy>y2) {step *= 1.5; dir2 = max(90,dir2-step);}
- else {step *= 0.5; dir2 += step;}
- }
- break;
- }
- }
- }
- return -1;
Gruß, euer kopierjunge


Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von copyboy ()