Ja, ein neuer Tag, ein neues Problem.
Die Physics Funktion bei GM ist ein klasse Sache. Nur wenns dann ans Pathfinding geht, wirds nervtötend. Die Gegner bleiben auf der Map laufend an Sträuchern, Wänden u.Ä. hängen. Ich habe einige Codes mit Pathfinding Funktionen gefunden, wie etwa diesen hier:
Wenn ich die Physik des Objekts abschalte, funktioniert alles wunderprächtig. Aber mit rührt sich das Ding nicht.
Kennt jemand einen Weg um Pathfinding mit Physik möglich zu machen? Oder evtl. eine alternative Methode mit Physik-Gedöns?
Ich habe eine Weile gesucht und diesen Code hier gefunden.
[/gml]
Alles anzeigen
Leider kapier ich ihn nicht und außerdem scheint er fehlerhaft zu sein.
Wäre also echt dankbar wenn jemand weiterhelfen könnte.
Die Physics Funktion bei GM ist ein klasse Sache. Nur wenns dann ans Pathfinding geht, wirds nervtötend. Die Gegner bleiben auf der Map laufend an Sträuchern, Wänden u.Ä. hängen. Ich habe einige Codes mit Pathfinding Funktionen gefunden, wie etwa diesen hier:
Wenn ich die Physik des Objekts abschalte, funktioniert alles wunderprächtig. Aber mit rührt sich das Ding nicht.
Kennt jemand einen Weg um Pathfinding mit Physik möglich zu machen? Oder evtl. eine alternative Methode mit Physik-Gedöns?
Ich habe eine Weile gesucht und diesen Code hier gefunden.
[/gml]
GML-Quellcode
- /// EXECUTE ONCE, create event works well, but an if-statement works too.
- path = new path;
- mp_grid_path(path, ... ); // assumed path points to the goal
- points = path_get_points(path); // get the number of nodes of that path
- point = 0;// path to the first node first... firstly.
- mag = 10;
- done = 0;
- /// EXECUTE IN STEP-EVENT OR SIMILAR!!
- if(!done) {
- var dir = degtorad(point_direction(x,y,path_get_point_x(path,point),path_get_point_y(path,point))); // direction of vector, and in RADIANS; degrees 4 noobs
- physics_apply_force(x,y,mag*cos(dir),mag*sin(dir));
- // apply a force, on yourself, centered on you, in the direction to the next point on the path...
- if(point_distance(x,y,path_get_point_x(path,point),path_get_point_y(path,point) < 64 /* Change this if necessary */ ) {
- point++;
- if(point > path_get_number()) {
- done = true;
- }
- }
- }
Leider kapier ich ihn nicht und außerdem scheint er fehlerhaft zu sein.
Wäre also echt dankbar wenn jemand weiterhelfen könnte.