MXQ Opublikowano 20 Stycznia 2011 Udostępnij Opublikowano 20 Stycznia 2011 Potrzebuje skryptu (A raczej chodzi mi o przykład) gry RTS, ale samo poruszanie się (nie potrzebuję statystyk, strzałów itp.). Po prostu prosty przykładzik. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 20 Stycznia 2011 Udostępnij Opublikowano 20 Stycznia 2011 A na czym ma polegać to poruszanie? Ludzik ma iść tam gdzie myszą klikniesz czy jak? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MXQ Opublikowano 20 Stycznia 2011 Autor Udostępnij Opublikowano 20 Stycznia 2011 no raczej skoro chodzi o RTS Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 20 Stycznia 2011 Udostępnij Opublikowano 20 Stycznia 2011 Gatunek nie narzuca sposobu poruszania. Definiujesz w Create dwie zmienne: GML CelX=x; CelY=y; Global mouse press left: GML CelX=mouse_x; CelY=mouse_y; W step: GML dist=point_distance(x,y,CelX,CelY); move_towards_point(CelX , CelY , min(dist,5)); Cała filozofia. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adriann Opublikowano 20 Stycznia 2011 Udostępnij Opublikowano 20 Stycznia 2011 Tylko że w tym przypadku jednostki będą dziwnie się ustawiać i nachodzić na siebie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MXQ Opublikowano 20 Stycznia 2011 Autor Udostępnij Opublikowano 20 Stycznia 2011 @up o to mi chodzi @platyna to ja wiedziałem jak zrobić chodzi mi o te najeżdżanie postaci na siebie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adriann Opublikowano 20 Stycznia 2011 Udostępnij Opublikowano 20 Stycznia 2011 Trzeba zrobić taki bajer że ludziki się będą ustawiać w kratkach,jeśli są zajęte to wybierają najbliższą,ale kodem jak to napisać to nie wiem..może masterzy ci napiszą;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności ANtY Opublikowano 20 Stycznia 2011 Filar Społeczności Udostępnij Opublikowano 20 Stycznia 2011 Step Avoiding @up: albo tak, po prostu tablice mapy sobie robisz i ustalasz, które kratki zajęte Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 20 Stycznia 2011 Udostępnij Opublikowano 20 Stycznia 2011 To weź wytłumacz o co ci chodzi. Tylko wybrana jednostka ma się przemieścić czy cały oddział? Precyzujcie dokładnie ludzie czego oczekujecie. Nie każdy musi być zaznajomiony z RTSami. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności ANtY Opublikowano 20 Stycznia 2011 Filar Społeczności Udostępnij Opublikowano 20 Stycznia 2011 To weź wytłumacz o co ci chodzi. Tylko wybrana jednostka ma się przemieścić czy cały oddział? Precyzujcie dokładnie ludzie czego oczekujecie. Nie każdy musi być zaznajomiony z RTSami. Zaznaczone jednostki, ale żeby nie nachodziły na siebie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 20 Stycznia 2011 Udostępnij Opublikowano 20 Stycznia 2011 To nie mogą po prostu przy kolizji z inną jednostką się zatrzymać? Albo przy ustawianiu położenia docelowego przy kliknięciu sprawdzić czy nie ma tam jednostki innej? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adriann Opublikowano 20 Stycznia 2011 Udostępnij Opublikowano 20 Stycznia 2011 Cały oddział= jedna jednostka? jemu chodzi o ustawienie jednostek w grupie,przynajmniej to wynika z tego co mówił Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 20 Stycznia 2011 Udostępnij Opublikowano 20 Stycznia 2011 Sporo jest rozwiązań na ten temat. Możesz zrobić tak: Chodzenie tak jak Platyna mówi, zaznaczanie i odznaczanie jednostki masz? Jeżeli tak to do każdej w kolizji z innymi jednostkami (np jakimś parentem) daj: GML _range=5 // ustawiasz rozmiar obiektu, pokombinuj _dir=point_direction(x,y,other.x,other.y) _x=(x+other.x)/2 _y=(y+other.y)/2 x=_x-lengthdir_x(_range*2,_dir) y=_y-lengthdir_y(_range*2,_dir) other.x=_x+lengthdir_x(_range*2,_dir) other.y=_y+lengthdir_y(_range*2,_dir) Jednostka będzie odpychała inne które napotka, fajnie to wygląda i sie prezentuje:) W moim RTSie zdało egzamin. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MXQ Opublikowano 20 Stycznia 2011 Autor Udostępnij Opublikowano 20 Stycznia 2011 @up prawie dobrze tylko ludziki tańczą wokół tego co doszedł co celu pierwszy ;| E:zaznaczanie i odznaczanie jednostki mam i system ruchu: move toward point Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Lechu4444 Opublikowano 20 Stycznia 2011 Udostępnij Opublikowano 20 Stycznia 2011 To zrób tak że jak jeden spełni warunek to zatrzymuje się cały oddział. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adriann Opublikowano 20 Stycznia 2011 Udostępnij Opublikowano 20 Stycznia 2011 Ale to lipa będzie,na tych kratkach niech mu ktoś powie jak zrobić i będzie po kłopocie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rudy Opublikowano 21 Stycznia 2011 Udostępnij Opublikowano 21 Stycznia 2011 Miałem podobny problem, rozwiązałem go przez tworzenie formacji :) . Trochę to może być skomplikowane i wymaga obiektu kontrolnego i tablicy zaznaczonych obiektów, ale wszystko da sie zrobić. Ogólnie to wyglądało tak: Obiekt kontrolny: Create GML // Tworzymy jakąś formację, np linię // Każdy obiekt formacji (indeks) posiada inne współrzędne względem pierwszej pozycji // Nie wpisujemy tutaj odległości, tylko jakby taki mnożnik, żeby działało i na duże i małe obiekty // Zauważ, że formacja obsługuje maksymalnie 5 jednostek, musisz dopisać resztę (ewentualnie wymyślić funkcję) formation_line_num = 5; formation_line_x[0] = 0; formation_line_y[0] = 0; formation_line_x[1] = 0; formation_line_y[1] = 1; formation_line_x[2] = 0; formation_line_y[2] = -1; formation_line_x[3] = 0; formation_line_y[3] = 2; formation_line_x[4] = 0; formation_line_y[4] = -2; //Tworzymy tablicę zaznaczonych obiektów // select_size_max będzie wyznaczało wielkość największej jednostki. Każda jednostka musi mieć // stworzoną zmienną size, która będzie mówiła, jak wielki jest promień wokół jednostki select[0] = -1; select_num = 0; select_size_max = 0; // Tworzymy zmienne potrzebne do zaznaczania. Od teraz wszystkie operacje // zaznaczania (najlepiej również odrysowanie pasku życia nad obiektem) będą // należały do tego obiektu xx = 0; yy = 0; zaznacz = false; Obiekt kontrolny: Global Left Pressed GML // Zaczynamy zaznaczenie xx = mouse_x; yy = mouse_y; zaznacz = true; Obiekt kontrolny: Global Left Release GML // Obiekt kontrolny powinien być pierwszą instancją. Musi wyzerować tablice zaznaczeń zanim // obiekty zaczną się do niej "wpisywać". Chyba, że chcesz dodanie do zaznaczenia. W sumie nic trudnego :D if (!keyboard_check(vk_shift)) { select_num = 0; select_size_max = 0; zaznacz = false; // EDIT: dopisałem tutaj zmianę znacznika, zapomniałem o tym } Wszystkie obiekty do zaznaczenia: Create GML // Musimy dodać parę zmiennych potrzebnych do chodzenia des_x = 0; des_y = 0; action = "stój"; des_speed = 5; // akcje lubię pisać w ciągu znaków. Więcej zajmuje, ale wiadomo, co obiekt robi :) . // Można również skorzystać ze stałych // Dodajemy również zmienną size size = 50; Wszystkie obiekty do zaznaczenia: Global Left Release GML // Samo zaznaczenie będzie wykonywane przez obiekt, który może być zaznaczony. // Sprawdzanie, czy obiekt znajduje się w środku zaznaczenia if (x >= min(obiekt_kontrolny.xx, mouse_x) && y >= min(obiekt_kontrolny.yy, mouse_y) && x <= max(obiekt_kontrolny.xx, mouse_x) && y <= max(obiekt_kontrolny.yy, mouse_y)) { obiekt_kontrolny.select[obiekt_kontrolny.select_num] = id; obiekt_kontrolny.select_num += 1; obiekt_kontrolny.select_size_max = max(size, obiekt_kontrolny.select_size_max); } Obiekt kontrolny: Global Right Release GML // Wyznaczamy każdemu obiektowi z osobna inną współrzędną for (i = 0; i < select_num || i < formation_line_num; i += 1) { select.des_x = mouse_x + formation_line_x*select_size_max; // EDIT select.des_y = mouse_y + formation_line_y*select_size_max; // EDIT select.action = "ruch"; } /* Jeżeli interesuje cie obrót formacji tak, aby linia była prostopadła do kierunku przyjścia, spróbuj tego: var select_direction; if (select_num > 0) select_direction = point_direction(select[0].x, select[0].y, mouse_x, mouse_y); for (i = 0; i < select_num || i < formation_line_num; i += 1) { select.des_x = mouse_x + (formation_line_x*cos(degtorad(select_direction))+formation_line_y*sin(degtorad(select_direction)))*select_size_max; select.des_y = mouse_y + (formation_line_x*sin(degtorad(select_direction))+formation_line_y*cos(degtorad(select_direction)))*select_size_max; select.action = "ruch"; }*/ Wszystkie obiekty do zaznaczenia: Step GML // Wykonujemy ruch if (action == "ruch") { move_towards_point(des_x, des_y, des_speed); if (point_distance(x, y, des_x, des_y) < 5) // EDIT: Zapomniałem wyzerować prędkości po skończonym ruchu { action = "stój"; speed = 0; } } Troche tego jest, ale zapewniam cię, że będzie działać. Poza tym można ten kod udoskonalać na wiele sposobów, tworzyć nowe formacje (zapisać je w dwuwymiarowej tablicy, żeby można było wybrać), stworzyć obrót formacji... myślę, że będzie działac ;) EDIT: jeżeli chciałbyś zrobić funkcję, która by wyznaczała miejsca, możesz to zrobić dodając nowe funkcje: formation_line_x i formation_line_y (lub formation_x i formation_y, jeżeli będzie więcej formacji): formation_line_x(index) GML // Funkcja musi być, choćby nawet zwracała 0, wiadomo, co z czego się bierze return 0; formation_line_y(index) GML if (argument0 mod 2 == 0) return -ceil(argument0/2); else return ceil(argument0/2); Usuwasz wtedy wszystkie formation_line z Create obiektu kontrolnego, a w Right Release zamieniasz [ ] na ( ) (i usuwasz warunek przerwania pętli). I tyle ;) EDIT2: Dodałem w kodzie dopiski EDIT, w tych miejscach pozmieniałem błędy, które mogły powodować błąd działania (w końcu pisałem z głowy) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MXQ Opublikowano 21 Stycznia 2011 Autor Udostępnij Opublikowano 21 Stycznia 2011 ___________________________________________ ERROR in action number 1 of Step Event for object o_hero: Error in code at line 2: if (action == "ruch") at position 6: Unknown variable action ___________________________________________ E: Jakbyś mógł to wyślij mi gotowy przykład na GM7 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Roki Opublikowano 21 Stycznia 2011 Udostępnij Opublikowano 21 Stycznia 2011 Nie ma zmiennej action. Dodaj w create GML action = "ruch" Albo daj to jak mają się ruszać, tak trudno samemu wpaść ;O Z resztą masz tam w poście wyżej: Wszystkie obiekty do zaznaczenia: Create GML // Musimy dodać parę zmiennych potrzebnych do chodzenia des_x = 0; des_y = 0; action = "stój"; des_speed = 5; // akcje lubię pisać w ciągu znaków. Więcej zajmuje, ale wiadomo, co obiekt robi :) . // Można również skorzystać ze stałych // Dodajemy również zmienną size size = 50; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MXQ Opublikowano 21 Stycznia 2011 Autor Udostępnij Opublikowano 21 Stycznia 2011 nie rozumiem trochę w czym mi pomógł ten przykład Rudego o co w nim chodzi? jak kilku kolesi idzie do punktu to na siebie nachodzą Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Roki Opublikowano 21 Stycznia 2011 Udostępnij Opublikowano 21 Stycznia 2011 Miałem podobny problem, rozwiązałem go przez tworzenie formacji . Trochę to może być skomplikowane i wymaga obiektu kontrolnego i tablicy zaznaczonych obiektów, ale wszystko da sie zrobić. Ogólnie to wyglądało tak: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MXQ Opublikowano 21 Stycznia 2011 Autor Udostępnij Opublikowano 21 Stycznia 2011 jak kilku kolesi idzie do punktu to na siebie nachodzą to był mój problem rozwiązał go Alwin tylko że potrzebuję teraz, żeby ludziki nie tańczyły wokół tego co dojdzie do celu pierwszy Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności ANtY Opublikowano 21 Stycznia 2011 Filar Społeczności Udostępnij Opublikowano 21 Stycznia 2011 to był mój problem rozwiązał go Alwin tylko że potrzebuję teraz, żeby ludziki nie tańczyły wokół tego co dojdzie do celu pierwszy Podobny do pakła jesteś Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
alwin Opublikowano 21 Stycznia 2011 Udostępnij Opublikowano 21 Stycznia 2011 Myslę że rudego sposób jest dosyć ciekawy:) Podeślę Ci gotowy przykładzik oki? Teraz nie mam czasu ale jak będę wolny to Ci pomogę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MXQ Opublikowano 21 Stycznia 2011 Autor Udostępnij Opublikowano 21 Stycznia 2011 ale czy jego przykład zatrzymuje te biegające ludziki wokół tego jednego co doszedł do celu pierwszy?\ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rudy Opublikowano 21 Stycznia 2011 Udostępnij Opublikowano 21 Stycznia 2011 Ten kod rozwiązuje to inaczej. Nie powoduje wyznaczenia jednego punktu każdemu obiektowi i teraz "pchajcie cie wszyscy" (chociaż ten spósób też jest niezły :) ). Z pewnością grałeś w Kozaki, czy którąś z serii Earth... albo jakąkolwiek strategię ;) . W większości gier strategicznych jest możliwość ustawienia jednostek w formacji. Ten kod na to ci pozwala. Pisałem go z głowy, dlatego jest tam parę błędów, ale całość działa. TUTAJ MASZ LINK DO PRZYKŁADU EDIT: Niestety nie mam siódemki, dałem więc w kodzie z osiem. Lepsze to niż nic. Spróbuj jeszcze otworzyć kopię zapasową: TUTAJ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MXQ Opublikowano 23 Stycznia 2011 Autor Udostępnij Opublikowano 23 Stycznia 2011 ale dla mnie skrypt Alwina był lepszy z tym wzajemnym odpychaniem tylko że te ludziki łazikowały wokół tego co doszedł do celu pierwszy i tylko teraz chodzi mi o to żeby się zatrzymywały Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sheriff99 Opublikowano 23 Stycznia 2011 Udostępnij Opublikowano 23 Stycznia 2011 Ściągnij ten przykład z yoyogames. Tu masz wszystko. http://www.yoyogames.com/games/74537/download Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MXQ Opublikowano 23 Stycznia 2011 Autor Udostępnij Opublikowano 23 Stycznia 2011 ale ja nie chce nowego systemu ruchu tylko chce rozwiązać ten problem z powyższego mojego postu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kt1117 Opublikowano 23 Stycznia 2011 Udostępnij Opublikowano 23 Stycznia 2011 To jak dojdzie to musisz zapisać to w zmiennej i odwoływać się do niej od innego obiektu. 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ę