7ed Opublikowano 18 Czerwca 2014 Udostępnij Opublikowano 18 Czerwca 2014 Witam. Zaczynam kombinować z GML w GMS. Staram się stworzyć system poruszania oparty o grid z wykrywaniem kolizji i szczerze mówiąc nie wiem jak połączyć place_empty z kierunkiem w stopniach + speed. Czy może ktoś coś zasugerować? Samo poruszanie się jest bardzo proste jak na razie: if keyboard_check(ord("W")) { if (place_snapped(32,32)){ motion_set(90,32); } } if keyboard_check(ord("S")) { if (place_snapped(32,32)){ motion_set(270,32); } } if keyboard_check(ord("D")) { if (place_snapped(32,32)){ motion_set(0,32); } } if keyboard_check(ord("A")) { if (place_snapped(32,32)){ motion_set(180,32); } } else { motion_set(0,0); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Lechu4444 Opublikowano 18 Czerwca 2014 Udostępnij Opublikowano 18 Czerwca 2014 if(keyboard_check(ord("W")) && place_empty(x,y-32)) :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
7ed Opublikowano 18 Czerwca 2014 Autor Udostępnij Opublikowano 18 Czerwca 2014 Fakt, nie pomyślałem xD A pytanie z innej beczki. Mam obiekt z losowym ruchel (losowanie wartości z przedziału 1-4 i przypisane kierunki do nich). Obiekt wystepuje w wielu instancjach w room-ie. Pierwszy umieszczony porusza się ok, pozostałe pozostają bez ruchu (chyba, że obiekt zostanie zniszczony to następny w kolejności umieszczania zaczyna reagować na skrypt). Jak mozna zmusić wszystkie obiekty do losowego ruchu? Każdy osobo nie ten sam kierunek (oczywiście zawsze używam self przy zmiennych w losowaniu) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 18 Czerwca 2014 Udostępnij Opublikowano 18 Czerwca 2014 No właśnie nie powinieneś używać self. Kod powinien być wykonywany w danym obiekcie którego dotyczy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
7ed Opublikowano 18 Czerwca 2014 Autor Udostępnij Opublikowano 18 Czerwca 2014 Tak też robiłem i niestety efekt ten sam. Cały kod ruchu jest zawarty w step zawsze. kierunek=0; losuj=random_range(1,5); if losuj>=0 && losuj<2 { kierunek = 0; } if losuj>=2 && losuj<3 { kierunek = 90; } if losuj>=3 && losuj<4 { kierunek = 180; } if losuj>=4 { kierunek = 270; } if place_snapped(32,32) { motion_set(kierunek,32); } else { motion_set(0,0); } Sam ruch działa poprawnie. Niestety tylko na pierwszy umieszczony obiekt. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 18 Czerwca 2014 Udostępnij Opublikowano 18 Czerwca 2014 Ten sam kod: GML kierunek = irandom_range(0,3)*90 //albo: kierunek = choose(0,90,180,270) //mozesz przejrzec powyzsze funkcje w dokumentacji if(place_snapped(32,32)) motion_set(kierunek,32) Fragment motion_set(0,0) całkowicie zatrzymuje obiekt, jest on zbędny, jak myślę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
7ed Opublikowano 18 Czerwca 2014 Autor Udostępnij Opublikowano 18 Czerwca 2014 Skorzystam, każda skrócona wersja jest mile widziana. motion_set(0,0) - to jest element od czegoś jeszcze. Będzie docelowo na zmianę między ruchem postaci a wrogów. Coś typu tury i chodzi o ruch na zasadzie krok ja krok przeciwnik. A jak to wygląda w kwestii ruchu tylko jednego obiektu? Przykładowo umieszczam przeciwnika 3x na mapie, ale właśnie tylko jeden się porusza. Powiem szczerze, że coś tam majstruje w GMS od grudnia ale przez brak czasu szło to opornie i raczej były to inne rozwiązania. Sam jestem na co dzień przyzwyczajony raczej do webdev niż GML ;] [edit] Powyższe już nie ważne. Już wiem co i jak ;] Mam inne pytanie. Ruch obiekty będącego teoretycznym przeciwnikiem (obiektów w sumie) już działa poprawnie ale wykrywanie kolizji coś zawodzi. kod poniżej prosty lecz do testu wystarczający kierunek = irandom_range(0,3)*90 if kierunek = 0 { check = place_empty(x+32,y); } if kierunek = 90 { check = place_empty(x,y-32); } if kierunek = 180 { check = place_empty(x-32,y); } if kierunek = 270 { check = place_empty(x,y+32); } if global.player_turn = false { if(place_snapped(32,32) && check) motion_set(kierunek,32) global.obiekty=-1; } else {motion_set(0,0)} 1. motion_set(0,0) tu ma zastosowanie. Zatrzymuje kiedy trzeba obiekty i ładnie działa. 2. global.obiekty i global.player_turn - tu bez znaczenia. Część czegoś zewnętrznego. 3. problem z wykrywaniem kolizji - czasem obiekty "głupieją" i wchodzą w ścianę (solid) lub przechodzą przez nią poza room i nie wiem szczerze dlaczego. 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ę