baca Opublikowano 27 Marca 2007 Udostępnij Opublikowano 27 Marca 2007 Ja tworze moją pierwszą grę nie jestem programistą, zaczełem tworzyć w GM 2 tygodnie temu. zrobiłem przeciwników "obcych" i są problemy zabije jednego z tego samego gatunku to wszyscy z tego gatunku giną. jest jeszcze drugi problem jak dotkną ściany to niemogą iść za mną tylko stoją w miejscu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
spyro Opublikowano 27 Marca 2007 Udostępnij Opublikowano 27 Marca 2007 1. Zamiast adresować zmienne ogólnie do np. obcy.cośtam, zapisz je w samych obiektach obcych i użyj self.cośtam, wtedy efekt/zmienna będzie się tyczyła jednego konkretnego obcego w którym aktualnie dzieje się akcja, a nie wszystkich obiektów o nazwie "obcy" :P 2. Zwiększ maksymalną odległość od ściany dla obcego :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gooman Opublikowano 27 Marca 2007 Udostępnij Opublikowano 27 Marca 2007 AD2. Albo jako maske ustaw sprite w ksztalcie kolka. Maske ustawiasz w głównym oknie obiektu bodajże pod ustawieniami parent. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
baca Opublikowano 28 Marca 2007 Autor Udostępnij Opublikowano 28 Marca 2007 maska terz nie działa // CREATE xx = x; yy = y; entered = true; move_speed = 2; image_single=0; image_speed=0; max_hlto = 50; // maximum zycia hlto = 50; // zycie ustawione na maximum imie = 'X-obcy Mlody'; // imie potwora atak = false; podazaj = false; // czy ma podążać za graczem czy nie k=stoj; // kierunek w ktorym ma isc dyst=50*50; // dystans przy jakim zaczyna gonić gracza alarm[0] = room_speed*2; alarm[1] = room_speed*random(2); //STEP if hlto <= 0 { with(self) instance_destroy(); bohater.score=bohater.score+50 //Gdy kosmita zginie dostajesz 50 Pkt. bohater.zabitychW=bohater.zabitychW+1//Gdy kosmita zginie w statystykach masz o jedenego zabitego więcej. exit; } [/quote] ja mam coś takiego umieszczone w kodzie obcego i jak zabije jednego to giną terz inni. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 28 Marca 2007 Udostępnij Opublikowano 28 Marca 2007 if hlto <= 0 { instance_destroy(); score+=50 //Gdy kosmita zginie dostajesz 50 Pkt. bohater.zabitychW+=1 //Gdy kosmita zginie w statystykach masz o jedenego zabitego więcej. exit; } "with(self)" wcale nie jest potrzebne :P a te "score" to jest już wbudowany warunek w GM'ie :) U mnie dodałem kodzik i wszystko cacy. pokarz kod jeśli obcy dotknie naboju i gdy nabój dotknie obcego (Jeśli tak masz :P ) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
spyro Opublikowano 28 Marca 2007 Udostępnij Opublikowano 28 Marca 2007 No bo self działa tylko wtedy jak jest bez with, ponieważ with pobiera id obiektu w nawiasie i wykonuje akcje do wszystkich obiektów o takim id. To tak samo jakbyś napisał with(all) { self.lol += 200 } to też zadziała do wszystkich obiektów, ponieważ najpierw zadresowałeś akcję do all, a później dałeś self, więc akcja dzieje dla all, jakby all to było self :3 A self to jest zmienna ogólna globalna wewnętrzna o stałej "rozciągłości" i nie może być definiowana ani jako globalna ani lokalna. W Waszych funkcjach, jest też niepotrzebne exit na końcu, ponieważ instance_destroy() dzieje się tylko raz i nie jest funkcją pernamentną, nie ma tej stałej "rozciągłości" :] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
baca Opublikowano 29 Marca 2007 Autor Udostępnij Opublikowano 29 Marca 2007 a co z blokowaniem się ze ścianą bo nic nie pomogło :frusty: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
spyro Opublikowano 29 Marca 2007 Udostępnij Opublikowano 29 Marca 2007 A mógłbyś podać kodzik na gravę i move_contact (czy jak to tam masz) bo tak to nie wiem jak ci dopomóc... :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
baca Opublikowano 30 Marca 2007 Autor Udostępnij Opublikowano 30 Marca 2007 step if hlto <= 0 { instance_destroy(); bohater.score=bohater.score+50 //Gdy kosmita zginie dostajesz 50 Pkt. bohater.zabitychW=bohater.zabitychW+1//Gdy kosmita zginie w statystykach masz o jedenego zabitego więcej. exit; } if atak && bohater.atak_npc != id atak = false; var gracz; gracz=instance_nearest(x,y,bohater); if ( distance_to_object(gracz)<dyst ) { podazaj=true; } else { podazaj=false; } if (podazaj==true) { if (gracz.y>y+63) { if (place_free(x,y+32)) k=dol; else { if (gracz.x>x) k=prawo; else k=lewo; } } if (gracz.y<y-63) { if (place_free(x,y-32)) k=gora; else { if (gracz.x>x) k=prawo; else k=lewo; } } if (gracz.x>x+63) { if (place_free(x+32,y)) k=prawo; else { if (gracz.y>y) k=dol; else k=gora; } } if (gracz.x<x-63) { if (place_free(x-32,y)) k=lewo; else { if (gracz.y>y) k=dol; else k=gora; } } } switch (k) { case gora: if entered { yy -= 32; entered = false; sprite_index=spr_upo; image_single=-1; image_speed=0.3; k=stoj; } break; case dol: if entered { yy += 32; entered = false; sprite_index=spr_downo; image_single=-1; image_speed=0.3; k=stoj; } break; case lewo: if entered { xx -= 32; entered = false; sprite_index=spr_lefto; image_single=-1; image_speed=0.3; k=stoj; } break; case prawo: if entered { xx += 32; entered = false; sprite_index=spr_righto; image_single=-1; image_speed=0.3; k=stoj; } break; } if place_free(xx,yy) { if mp_linear_step(xx,yy,move_speed,false) { entered = true; if (k=stoj) { image_single=0; image_speed=0; } } } else { xx=x; yy=y; } create xx = x; yy = y; entered = true; move_speed = 2; image_single=0; image_speed=0; max_hlto = 50; // maximum zycia hlto = 50; // zycie ustawione na maximum imie = 'X-obcy Mlody'; // imie potwora atak = false; podazaj = false; // czy ma podążać za graczem czy nie k=stoj; // kierunek w ktorym ma isc dyst=50*50; // dystans przy jakim zaczyna gonić gracza alarm[1] = room_speed*random(2); alarm1 var kierunek; if !podazaj { kierunek = choose(lewo,prawo,gora,dol); switch kierunek { case gora: krok_dogora(); break; case dol: krok_wdol(); break; case lewo: krok_wlewo(); break; case prawo: krok_wprawo(); break; } } alarm[1] = room_speed*random(2); script //krok w lewo if entered { xx -= 32; entered = false; sprite_index=spr_lefto; image_single=-1; image_speed=0.3; k=stoj; } i tak do karzdego kierunku :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
cyberdog Opublikowano 30 Marca 2007 Udostępnij Opublikowano 30 Marca 2007 A nie lepiej dać "trochę" krótszy kod? Przecierz to tylko problem z blokowaniem się o ścianę. :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
spyro Opublikowano 30 Marca 2007 Udostępnij Opublikowano 30 Marca 2007 A wiesz co ja ci-ci po-powiem ?? (:P) To jest kodzik z przykładu bodajże "System walki ala Tibia"... Tak ? Zgadłem :D I ten kodzik ma właśnie tą jedną wadę, że działa TYLKO wtedy, kiedy WSZYSTKIE obiekty na planszy są wyrównane do siatki o rozmiarach 32:32... I mają takie same rozmiary. A ażeby zlikwidować ten perfidny błąd, zamień if mp_linear_step(xx,yy,move_speed,false) { entered = true; if (k=stoj) { image_single=0; image_speed=0; } } na: if mp_potential_step(xx,yy,move_speed,true) { mp_potential_settings(180,10,4,true); entered = true; if (k=stoj) { speed=0; image_single=0; image_speed=0; } } I musi być dobrze :D To po prostu bardziej zaawansowane motion planning ^^. Tak na marginesie dodam, że ten kod z tego przykładu ma dużo więcej pomniejszych błędów i całą masę niepotrzebnego kodu xD Jest dość przestarzały po prostu :P Dałoby się go zrobic duuużo krócej... Nie krytykując autorów oczywiście xP 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ę