Skocz do zawartości

Palety


Rekomendowane odpowiedzi

Nie wiem jak nazwać problem, więc opiszę to w ten sposób:

Mamy jakiś obiekt dajmy na to okon.

I mamy też drugi obiekt, powiedzmy opaleta.

 

Kod w opalecie:

//create

GML
cos=0

maxcos=1000

//step

GML
if distance_to_object(okon) < 10

{

if cos<maxcos then cos+=1

}

 

I na początku roomu jest tylko 1 obiekt okon oraz 1 obiekt opaleta.

I potem gdzieś się dostawi 2 obiekt opaleta.

I nie wiem jak zrobić, że gdy opaleta będzie pełny, to okon idzie do tej drugiej opalety.

 

Wiem,że można zrobić opaleta1, opaleta2, ale nie chce tak.

 

 

Prosiłbym o pomoc.

 

Zmieniłem nazwę tematu - Uzjel

Odnośnik do komentarza
Udostępnij na innych stronach

Stosunkowo dużo pisania, teraz nie mam czasu ale jutro mogę Ci to zrobić, jednak od razu chciałbym zauważyć, że w podanym przez Ciebie kodzie jakkolwiek nie mającym lub mającym sensu, nie możesz tworzyć zmiennej "cos" gdyż jest to funkcja (cosinus) i będzie wyskakiwać błąd. Zmień ją na coś innego chociażby "cs".

Odnośnik do komentarza
Udostępnij na innych stronach

W okoniu:

GML
// create

target = noone;

 

// step

if( target == noone && alarm[0] < 0 )

alarm[0] = room_speed*.5;

 

if( instance_exists( target ) )

{

move_towards_point( target.x, target.y, .6 );

 

if( target.cos == target.maxcos )

target = noone;

}

 

// alarm 0

with( opaleta )

{

if( cos != maxcos )

{

target = id;

break;

}

}

Odnośnik do komentarza
Udostępnij na innych stronach

Sprawdzone, musi działać :)

 

EDIT: Zapomniałbym!

 

Skrypt napisany przez Maximala

 

instance_nearest_ext()

GML
X = argument0;

Y = argument1;

Obj = argument2;

n = argument3;

 

if ( n > instance_number( Obj )) return noone;

Ids = ds_list_create();

for (i = 0; i < n; i += 1)

{

Id = instance_nearest( X, Y, Obj );

instance_deactivate_object( Id );

ds_list_add( Ids, Id );

}

for (i = 0; i < ds_list_size( Ids ); i += 1) instance_activate_object( ds_list_find_value( Ids, i ) );

ds_list_destroy( Ids );

return Id;

 

Musisz go dodać w projekcie gry.

 

 

 

okon

Create:

GML
action=1;

target=0;

spd=3; //predkosc podchodzenia do palet

pelspd=0.03; //predkosc zapelniania palet (jesli o to ma chodzic oczywiscie, jak nie to zmien :P)

dystans=32; //odlegosc z ktorej kon moze korzystac z palety</span></span></span>

 

Step

GML
switch(action)

{

case 1: //ACTION=1 gdy stoi i poszukuje najblizszej palety ktora nie jest pelna

var _n;

_n=instance_number(opaleta);

if _n=0 then break; //jesli nie ma zadnych palet to wyjazd xd

for(i=1; i<=_n; i+=1) //petla sprawdzajaca po kolei najblizsze palety

{

target=instance_nearest_ext(x, y, opaleta, i);

if target.zapelnienie<1 //1 = 100%, czyli jezeli jest mniej niz 100% zapelnienia danej palety np 0.4 (40%) to:

{

action=2; //przechodzi do drugiego etapu

break; //wychodzi z tej petli by nie sprawdzac nastepnych polozonych dalej

}

}

break;

 

case 2: //ACTION=2 gdy idzie do wybranej wczesniej palety

/* prosty system ruchu ktory mozesz wymienic na inny co jest wskazane uwzgledniajac omijanie innych obiektow */

var _dir;

_dir=point_direction(x,y,target.x,target.y);

x+=lengthdir_x(spd,_dir);

y+=lengthdir_y(spd,_dir);

/**/

 

if point_distance(x,y,target.x,target.y)<dystans //jezeli jest juz odpowiednio blisko palety..

{

action=3; //przechodzi do etapu korzystania z tej palety

}

break;

case 3: //ACTION=3 korzystanie z palety, tutaj w zasadzie robisz co chcesz, ale ja podam przyklad:

target.zapelnienie+=pelspd; //zapelnij palete o wartosc "pelspd" (ustalona w create)

if target.zapelnienie>=1 //jesli juz sie zapelni

{

action=1; //wracamy do 1szego etapu by znalezc inna palete ktora nie jest pelna :-)

}

 

break;

}

 

opaleta

Create

GML
zapelnienie=0;

 

Draw

GML
draw_sprite(sprite_index,-1,x,y);

 

draw_set_color(c_red);

draw_text(x-16,y-18,string(round((min(1,zapelnienie)*100)))+"%");

 

Edit2: Jakby coś nie tego, to wrzucam jeszcze gotowy plik:

https://gmclan.org/up6160_12_exampl.html

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ę...