Quetzacotl Opublikowano 13 Stycznia 2005 Udostępnij Opublikowano 13 Stycznia 2005 Stworzyłem ruch postaci na wzór tego z pierwszych 3 części GTA, mianowicie lewo/prawo - obrót, góra/dół - chodzenie, widok z góry. Zrobiłem to na klockach, link tutaj > http://members.lycos.co.uk/xagon/gta-ruch.gm6 Mam jednak taki problem, iż kiedy idę do przodu lub do tyłu, i skręcam w lewo to postać idzie dalej i równocześnie skręca, jednak gdy chcę skręcać w prawo to postać staje i tylko się obraca nie idzie do przodu. Byłbym wdzięczny gdybyście rzucili okiem na plik i wytłumaczyli mi gdzie jest błąd. Dzieki z góry, pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
fino25 Opublikowano 14 Stycznia 2005 Udostępnij Opublikowano 14 Stycznia 2005 Witam! Sam jestem początkującym użytkownikiem, ale znam coś, co może rozwiązać Twój problem. Jest to zmienienie klawiszy poruszania się na W,S,A,D... Wtedy wszystko będzie dobrze, płynnie chodzić (przynajmniej u mnie). Pozdrawiam! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gooman Opublikowano 14 Stycznia 2005 Udostępnij Opublikowano 14 Stycznia 2005 Zmiana klawiszy nie będzie potrzebna. Zamiast eventów odpowiadającym naciśnięciu klawiszy: góra, dół, lewo, prawo (te skasuj) zrób event keyboard-> <any key> i daj tam: if keyboard_check(vk_left) {direction+=5 speed=0.00000000000001 image_angle=direction} if keyboard_check(vk_right) {direction-=5 speed=0.00000000000001 image_angle=direction} if keyboard_check(vk_up) {speed=3} if keyboard_check(vk_down) {speed=-3} Powinno działać :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 14 Stycznia 2005 Filar Społeczności Udostępnij Opublikowano 14 Stycznia 2005 Działa, a tutaj poprawiona przeze mnie wersja. Daj to w step, by nie bawić się z dodatkowymi eventami: if keyboard_check(vk_left) { direction+=5 speed=0.00000000000001 image_angle=direction } else if keyboard_check(vk_right) { direction-=5 speed=0.00000000000001 image_angle=direction } if keyboard_check(vk_up) speed=3 else if keyboard_check(vk_down) speed=-3 else speed=0 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Quetzacotl Opublikowano 14 Stycznia 2005 Autor Udostępnij Opublikowano 14 Stycznia 2005 Hmm... no dobrze, podaliście mi jak zrobić żeby działało i działa, ale nie powiedzieliście mi w czym tkwił błąd w moich klockach, a chcę wiedzieć na przyszłość. I druga sprawa, korzystając z okazji, często wyskakuje mi pewien błąd, którego nie potrafie naprawić w żaden sposób, chociaż sprawdzam czy zmienna isnieje, jest poprawnie podana itp. nie mam pojecia o co chodzi, niby oczekuje na podanie zmiennej :| Tutaj screen > http://members.lycos.co.uk/xagon/blad.jpg Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 14 Stycznia 2005 Udostępnij Opublikowano 14 Stycznia 2005 Spróbuj zmienić nazwę zmiennej :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
bigshark Opublikowano 14 Stycznia 2005 Udostępnij Opublikowano 14 Stycznia 2005 przyczyn moze byc kilka: -jakis objekt,sprite itd. nazwales tak samo jak zmienną -pamietaj ze jesli przed nazwa zmiennej nie dasz global. to zmienna ta liczy sie tylko dla objektu w ktorym ją zadeklarowałeś Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 14 Stycznia 2005 Filar Społeczności Udostępnij Opublikowano 14 Stycznia 2005 Ewentualnie mozesz zrobic tak: https://gmclan.iglu.cz/upload/temp/gta-ruch.gm6 W twoim przykładzie wiesz co było źle? Spójrz na kolejność event'ów, UP jest sprawdzany przed RIGHT, a w RIGHT masz ustawione praktycznie zerowanie szybkości, a szybkosc oddzialowuje na obiekt dopiero po sprawdzeniu wszystkich eventów i "tyknięcia" jednego fpsa. Po prostu niepotrzebnie użyłeś tych niebieskawych klocków do zmiany direction i speed w LEFT i RIGHT, skoro powinieneś zmieniać tylko direction. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Quetzacotl Opublikowano 15 Stycznia 2005 Autor Udostępnij Opublikowano 15 Stycznia 2005 Hmm no ale gdybym nie chciał używac kodu to by się nie dało tego zrobić, na samych klockach? Ale dobra, już działa dobrze, dzieki za pomoc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 15 Stycznia 2005 Filar Społeczności Udostępnij Opublikowano 15 Stycznia 2005 No ale przecież w poprzednim poście dałem przykład zrobiony za pomocą klocków, więc o co chodzi? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
bigshark Opublikowano 15 Stycznia 2005 Udostępnij Opublikowano 15 Stycznia 2005 if keyboard_check(vk_left) { direction+=5 speed=0.00000000000001 image_angle=direction } else if keyboard_check(vk_right) { direction-=5 speed=0.00000000000001 image_angle=direction } if keyboard_check(vk_up) speed=3 else if keyboard_check(vk_down) speed=-3 else speed=0 TEN KOD JEST DOBRY ALE JAK ZROBIC WTEDY ZATRZYMYWANIE SIĘ NA INNYM OBJEKCIE?? SPEED=0 I BOUNCE AGAINST OBJECT NIE WYSTARCZA :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 15 Stycznia 2005 Administratorzy Udostępnij Opublikowano 15 Stycznia 2005 x=xprevious; y=yprevious; a w bounce spróbuj też "all object" zamiast "solid" Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
bigshark Opublikowano 15 Stycznia 2005 Udostępnij Opublikowano 15 Stycznia 2005 x=xprevious; y=yprevious; a w bounce spróbuj też "all object" zamiast "solid NIESTETY, nic to nie dało :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 15 Stycznia 2005 Filar Społeczności Udostępnij Opublikowano 15 Stycznia 2005 Pobróbuj z move_contact_solid(dir,maxdist) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Quetzacotl Opublikowano 15 Stycznia 2005 Autor Udostępnij Opublikowano 15 Stycznia 2005 Pobróbuj z move_contact_solid(dir,maxdist) <{POST_SNAPBACK}> Z tym blokowaniem sie o object to prosta sprawa, sam to wykombinowałem :P Mianowicie w kolizji daj zeby ustawilo diretion=direction a speed np "-0.00001" Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
bigshark Opublikowano 15 Stycznia 2005 Udostępnij Opublikowano 15 Stycznia 2005 żeby obiekt zatrzymywał sie na drugim to ja umiem, ale chodzi mi oto zeby zlikwidować taką sytuyacje: mój objekt zatrzyma sie na jakims drzewie i obroci sie np. w prawo to bedzie on nachodził na to drzewo. :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Quetzacotl Opublikowano 15 Stycznia 2005 Autor Udostępnij Opublikowano 15 Stycznia 2005 aaa... no to to było poruszane w jakimś temacie już, musisz wstawić maske, najlepiej sprite kwadratowy, przezroczysty z wielkością i szerokością danego sprite'a EDIT: a teraz ja mam znów problem, nie związany z tym ruchem ale nie chce zakładać nowego topicu, mianowicie chcę zrobić coś takiego: jest drzewo, podchodze do niego i uderzam w niego siekierą, następuje kolizja i wtedy przy drzewie powinien pokazać się jego pasek HP, który po jakichś 3 s znika, jeżeli znów w drzewo nie uderzysz, ilość HP ten pasek powinien pobierać z drzewa w które uderzyłem ofkoz, jednak nie wiem co zrobić żeby pobierał akurat z tego drzewa, jeśli na mapie jest wiecej takich samych drzew, żeby ich nie mylił. Po za tym ten pasek HP drzewa, to chcę żeby był sprite, tzn własny obraz paska chcę zrobić a nie jakieś brzydkie rec :P I teraz przypuśćmy, że drzewo ma 20 HP, i uderze w nie siekierą, to chcę aby paek który się pokaże przy drzewieskrócił się o jedną dwudziestą część swojej całości, czyli przekłądając na kod, powinno to zachodzić mniej więcej tak, że gdy pasek ma długość dajmy na to 200 to po uderzeniu długość skraca się o 10 i wynosi 190, ale nie powinien się ten pasek zmniejszać tylko obcinać, tak jakbym zmniejszał canvas size sprite'a, do tego chciałbym ten pasek zastosować też przy innych elementach, gdy będzie inna ilość HP dlatego długość paska powinna być zawsze najpeirw dzielona przez ilość HP danego obiektu i potem o tą ilość powinien być skracany pasek, czyli gdyby drzewo miało 10 Hp a dł. 200 to 200/10 daje 20 czyli kazde uderzenie skraca pasek tym razem o 20 : ) Wiem, że to b. skomplikowane, większość z tego potrafię zrobić sam jednak są elementy których nie potrafie wykonać dlatego opisałem wszystko. A te elementy są przeważnie najważniejszymi w całym skrypcie. Naprawdę bardzo dziękuję za pomoc - z góry... Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 15 Stycznia 2005 Udostępnij Opublikowano 15 Stycznia 2005 żeby obiekt zatrzymywał sie na drugim to ja umiem, ale chodzi mi oto zeby zlikwidować taką sytuyacje: mój objekt zatrzyma sie na jakims drzewie i obroci sie np. w prawo to bedzie on nachodził na to drzewo. :( <{POST_SNAPBACK}> Jak chcesz wiedzieć, to możesz tak spróbować :D : if not place_empty(x.drzewo,y.drzewo) { action_move("000010000",0); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
bigshark Opublikowano 16 Stycznia 2005 Udostępnij Opublikowano 16 Stycznia 2005 if not place_empty(x.drzewo,y.drzewo) { action_move("000010000",0); } Pisze że vairable name expected Nie ma zadnych zmiennych o nazwie drzewo, ani innych objektow, a object drzewo jest w ten sam sposob napisany(przez rz) co w codzie Co jest tego przyczyną?? ten gm6.0 jest jakis dziwny:( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 16 Stycznia 2005 Udostępnij Opublikowano 16 Stycznia 2005 Może się pomyliłem i trzeba drzewo.x :P i drzewo.y :) EDIT: Ale gafę walnąłem. Przecież tobie chodzi ogólnie o obiekty :] . Więc musisz tak: if not place_empty(x+1,y+1) { action_move("000010000",0); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
bigshark Opublikowano 16 Stycznia 2005 Udostępnij Opublikowano 16 Stycznia 2005 if not place_empty(x+1,y+1) { action_move("000010000",0); } Ten kod byłby dobry, jednak zdarza sie ze objekt blokuje sie w drzewo :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 16 Stycznia 2005 Udostępnij Opublikowano 16 Stycznia 2005 to dajesz większą odległość przy x i y :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Quetzacotl Opublikowano 17 Stycznia 2005 Autor Udostępnij Opublikowano 17 Stycznia 2005 Powtarzam prosbe: a teraz ja mam znów problem, nie związany z tym ruchem ale nie chce zakładać nowego topicu, mianowicie chcę zrobić coś takiego: jest drzewo, podchodze do niego i uderzam w niego siekierą, następuje kolizja i wtedy przy drzewie powinien pokazać się jego pasek HP, który po jakichś 3 s znika, jeżeli znów w drzewo nie uderzysz, ilość HP ten pasek powinien pobierać z drzewa w które uderzyłem ofkoz, jednak nie wiem co zrobić żeby pobierał akurat z tego drzewa, jeśli na mapie jest wiecej takich samych drzew, żeby ich nie mylił. Po za tym ten pasek HP drzewa, to chcę żeby był sprite, tzn własny obraz paska chcę zrobić a nie jakieś brzydkie rec I teraz przypuśćmy, że drzewo ma 20 HP, i uderze w nie siekierą, to chcę aby paek który się pokaże przy drzewieskrócił się o jedną dwudziestą część swojej całości, czyli przekłądając na kod, powinno to zachodzić mniej więcej tak, że gdy pasek ma długość dajmy na to 200 to po uderzeniu długość skraca się o 10 i wynosi 190, ale nie powinien się ten pasek zmniejszać tylko obcinać, tak jakbym zmniejszał canvas size sprite'a, do tego chciałbym ten pasek zastosować też przy innych elementach, gdy będzie inna ilość HP dlatego długość paska powinna być zawsze najpeirw dzielona przez ilość HP danego obiektu i potem o tą ilość powinien być skracany pasek, czyli gdyby drzewo miało 10 Hp a dł. 200 to 200/10 daje 20 czyli kazde uderzenie skraca pasek tym razem o 20 : ) Wiem, że to b. skomplikowane, większość z tego potrafię zrobić sam jednak są elementy których nie potrafie wykonać dlatego opisałem wszystko. A te elementy są przeważnie najważniejszymi w całym skrypcie. Naprawdę bardzo dziękuję za pomoc - z góry... Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 17 Stycznia 2005 Filar Społeczności Udostępnij Opublikowano 17 Stycznia 2005 Mam dzisiaj trochę wolnego, więc ci spróbuję zrobić ten przykład. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Quetzacotl Opublikowano 17 Stycznia 2005 Autor Udostępnij Opublikowano 17 Stycznia 2005 Byłbym bardzo wdzięczny, a i z pewnością inni się czegoś nauczą. :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 17 Stycznia 2005 Filar Społeczności Udostępnij Opublikowano 17 Stycznia 2005 Dodałem już na stronę. Spójrz na najnowsze zasoby na stronie głównej. W razie pytań wal śmiało. :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Quetzacotl Opublikowano 17 Stycznia 2005 Autor Udostępnij Opublikowano 17 Stycznia 2005 Dziękuję wylewnie :) juz sprawdzam EDIT: sprawdziłem, nie do końca rozumiem naczym polega to sprawdzanie id czy coś takiego, po za tym zrobiłeś tak, że długość pasak energii jest zależna od ilości HP, mi chodziło o to aby pasek był zawsze tak samo długi tylko zmniejszał się w innych proporcjach, ale to sam juz sobie zrobię, tyle chyba umiem :) A reszta jest wszystko cacy Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 17 Stycznia 2005 Filar Społeczności Udostępnij Opublikowano 17 Stycznia 2005 Długość paska nie jest zależna od HP tylko od szerokości sprite'a obiektu nadrzędnego. Wystarczy w obj_energia w event draw: en_w = ( nadobiekt.energia / nadobiekt.energia_maks ) * nadobiekt.sprite_width - 1; zamienić na: en_w = ( nadobiekt.energia / nadobiekt.energia_maks ) * tutaj_liczba_w_postaci_szerokosci - 1; Chodziło o uzyskanie efektu tak jak w niektórych rts'ach, że szerokość paska jest zależna od szerokości obiektu. :) A co do id to jest tak: Aby odwołać się do jakiegoś obiektu, wystarczy podać jego nazwe, np: gracz.x Jeśli chcemy odwołać się do obiektu z którym kolidujemy, to tylko w event colision mozna uzyc: other.x other.speed Jesli chcemy odwolac sie do samego siebie to uzywamy: x lub self.x Jesli chcemy odwolac sie do wszystkich obiektow: with ( all ) instance_destroy(); To są słowa specjalne, po których identyfikujemy dane obiekty. Niestety, jesli uzywamy paru obiektow tego samego typu, to odwolanie sie za pomoca nazwy w przypadku checi pobrania jakiejs zmiennej spowoduje uzyskanie zmiennej od najmlodszego obiektu danego typu. Kazdy obiekt natomiast w momencie tworzenia dostaje wlasny id. Jest to unikatowy numer (widac go np. przy wstawianiu obiektow w edytorze plansz). Ten unikatowy numer sluzy jako alternatywna nazwa. Zamiast pisac: gracz.x mozemy zapisac np: 1000049.x Albo trzymac numer id danego obiektu w postaci zmiennej i uzywac: zmienna.x instance_create(...) wlasnie zwraca numer id tworzonego obiektu. W przykladzie dziala to na takiej zasadzie, ze podczas wywolania skryptu tworzy sie nowa zmienna: obiekt_energia. Jesli klikniemy na drzewo, to skrypt sprawdza czy ta zmienna nie rowna sie 0 (czy jest tam id jakiegos obiektu) jesli tak, to uaktualnia tylko temu obiektowi licznik, jesli nie, to tworzy nowy obiekt i zwraca do tej zmiennej jego id. Nastepnie drzewko tworzy temu obiektowi nowa zmienna z wlasnym id. Dzieki temu te obiekty maja zapisane swoje id. Energia id drzewka, drzewko id energii. Teraz mozna wprowadzic relacje, czyli np. w przypadku energii mozna sobie pobierac pozycje i inne zmienne konkretnego drzewka. Przy smierci paska energii, odwoluje sie on do "swojego" drzewka zerujac mu obiekt_energia. Dzieki temu drzewko znowu wie, ze nie ma przypisanego zadnego paska. 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ę