Gibki Kaktus Opublikowano 4 Lutego 2013 Udostępnij Opublikowano 4 Lutego 2013 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 Więcej opcji udostępniania...
Utermiko Opublikowano 4 Lutego 2013 Udostępnij Opublikowano 4 Lutego 2013 Pokombinuj może z tym: http://wiki.yoyogames.com/index.php/GML_Functions:_Instances Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Easeful Opublikowano 4 Lutego 2013 Udostępnij Opublikowano 4 Lutego 2013 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 Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 4 Lutego 2013 Autor Udostępnij Opublikowano 4 Lutego 2013 To podałem tylko przykładowo :P Dobra, dziś mi to nie potrzebne bo i tak za dużo nie zrobię, byłbym bardzo wdzięczny, gdyby jutro mógłbyś mi to zrobić. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 5 Lutego 2013 Udostępnij Opublikowano 5 Lutego 2013 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 Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 5 Lutego 2013 Autor Udostępnij Opublikowano 5 Lutego 2013 Nie działa twój kod. Nie wykrywa x i y targetu... ;/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Easeful Opublikowano 6 Lutego 2013 Udostępnij Opublikowano 6 Lutego 2013 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 Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 6 Lutego 2013 Autor Udostępnij Opublikowano 6 Lutego 2013 Wielkie dzięki, wszystko działa! A tak żeby nie zakładać nowego tematu mam jeszcze pytanie: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę