Skocz do zawartości

Problem z mp_potential_path. EDIT: Problem z nie wykonującym się alarmem.


H2S04

Rekomendowane odpowiedzi

Mam problem z zbieraczką, która ma pojechać do obiektu o_ore1/2/3. Napisałem skrypt ruchu lecz nie działa, stoi ona w miejscu i nie chce jechać, a mp_potential_step nie działa jak bym chciał. Chciał bym jeszcze dowiedzieć się jak ta zbieraczka ma wrócić do budynku z którego wyjechała. Każdy budynek ma własny "index" który później jest nadawany też stworzonej zbieraczce. Jeśli budynek ma index = 0; to zbieraczka, którą stworzę w tym budynku też będzie miała index = 0; Oraz Type = Type budynku. Z typem chodzi o to jaki ma zbierać surowiec, jak type = 0 to jedzie do o_ore1. Oczywiście zbieraczka po dojechaniu do budynku ma się zniszczyć, a później znowu utworzyć (Ale ten problem mam z głowy, bo dodałem alarm, który cały czas tworzy mi zbieraczki jeżeli jest jakaś w budynku). Tylko właśnie zatrzymałem się na tym path finding'u :/

 

EDIT: Problem z wracaniem do budynku już wiem jak rozwiązać... Takie proste, że o tym nawet nie pomyślałem... Wystarczy stworzyć w create zmienną = x oraz drugą = y. i później wpisać zamiast x i y te zmienne... collision line zrobi niszczenie pojazdu oraz dodawanie surowców itd. :D

 

EDIT2: Napisałem prosty kod... Jakoś na początku działał ale teraz już nie chce działać... Gdy podjedzie do obiektu o_ore1, pojazd się zatrzymuje, get zmienia się z false na true lecz alarm się nie wykonuje :o Chociaż poruszanie się tego pojazdu to dalej klapa << naprawione :/ Nie mogę się tego problemu z alarmem pozbyć. Czemu to cholerstwo nie chce się włączyć? :C

 

EDIT3: Uporałem się z tym... 7h męki ale się udało... Jakieś bugi z alarmami :/ Zmieniłem alarm i wszystko było OK.

 

 

kod:

Zbieraczka

Information about object: o_GraberCar
Sprite: s_Grabore
Solid: true
Visible: true
Depth: 0
Persistent: false
Parent: 
Children: 
Mask: 

No Physics Object
Create Event:

execute code:

image_speed = 0;
index = 0; // index budynku(id)
type = 0; // typ zbierania
speed = 0;
dir = direction;

n = instance_nearest(x,y,o_ore1)
n1 = instance_nearest(x,y,o_ore2)
n2 = instance_nearest(x,y,o_ore3)

//grid = mp_grid_create(0,0,room_height/3,room_width/322,32,32);
path = path_add();
//mp_grid_add_instances(grid,o_solid,1);
//mp_grid_path(grid,path,x,y,n.x,n.y,1);
mp_potential_path(path,n.x,n.y,1,0,solid)

Step Event:

execute code:

image_angle = direction;

if type = 0{
   if instance_exists(o_ore1){
       if distance_to_point(n.x,n.y) > 0{
           path_start(path,5,0,1);
       } else {
           path_end();
           speed = 0;
       }
   }
}

Pozdrawiam :).

 

Kod po przebudowie:

Information about object: o_GraberCar
Sprite: s_Grabore
Solid: true
Visible: true
Depth: 0
Persistent: false
Parent: 
Children: 
Mask: 

No Physics Object
Create Event:

execute code:

image_speed = 0;
index = 0;
type = 0;
speed = 0;


start = false;
alarm[10] = room_speed*1;

get = false;
back = false;
time = 0;
startdir = 0

yellow = 0;
red = 0;
blue = 0;

startx = 0;
starty = 0;




Alarm Event for alarm 0:

execute code:

var am;
am = choose(5,10,15,20,25,30,35,40,45,50)
global.yellow += 1;

if get = true{
   if type = 0{
       if time < 5{
           col = collision_line(x,y,x+lengthdir_x(64,direction),y+lengthdir_y(64,direction),o_ore
1,false,false);
           col.amount -= am;
           yellow += am;
           time += 1;
           alarm[0] = room_speed*1;
       } else {
           time = 0;
           get = false;
           back = true;
       }
   }
}

Alarm Event for alarm 10:

execute code:

start = true;

Alarm Event for alarm 11:

execute code:

global.yellow += yellow;
global.blue += blue;
global.red += red;
bc = collision_line(x,y,x+128,y+128,o_Graber,false,false);
bc.stack += 1;
instance_destroy();

Step Event:

execute code:


n1 = instance_nearest(x,y,o_ore2)
n2 = instance_nearest(x,y,o_ore3)
image_angle = direction;

if start = true{
   if back = false{

   if type = 0{
       if instance_exists(o_ore1){
           n = instance_nearest(x,y,o_ore1)
           if distance_to_point(n.x,n.y) > 1 {
               path = path_add();
               mp_potential_path(path,n.x,n.y,4,4,false)
               //mp_potential_step(n.x,n.y,4,o_solid);
               path_start(path,4,0,1);
           } else {
               path_end();
               speed = 0;
               direction = point_direction(x,y,n.x,n.y);
               alarm[0] = 3;
               get = true;
           }
       }
   }



   } else {
       if distance_to_point(startx,starty) > 0{
           mp_potential_step(startx,starty,4,false);
       } else {
           direction = startdir-180;
           speed = 0;
           start = false;
           alarm[11] = 3
       }
   }
}

Draw Event:

execute code:

draw_sprite_ext(sprite_index,type,x,y,1,1,direction,c_white,1);
draw_line_colour(x,y,x+lengthdir_x(64,direction),y+lengthdir_y(64,direction),c_r
ed,c_red);
if start = true{
draw_line_colour(x,y,n.y,n.y,c_green,c_green);
}
draw_text_colour(x,y+32,yellow,c_white,c_white,c_white,c_white,1);
draw_text_colour(x,y+16,get,c_white,c_white,c_white,c_white,1);
draw_text_colour(x,y,startdir,c_white,c_white,c_white,c_white,1);
draw_text_colour(x,y-16,yellow,c_white,c_white,c_white,c_white,1);
draw_text_colour(x,y-32,time,c_white,c_white,c_white,c_white,1);

Edytowane przez H2S04
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...