R.o.b Opublikowano 29 Czerwca 2014 Udostępnij Opublikowano 29 Czerwca 2014 Cześć Wszystkim! Pracuję nad gierką, w której odbijamy laser lustrami. Problem polega na tym, że wpisując go w gm8 działał dobrze, ale w gms nie chce prawidłowo działać. Ustawiłem nawet specjalnie maskę tak, żeby kolizja następowała, gdy obj_laser jest w pozycji x+12, y+12 od brzegu obrazka rakietki. Oto kod z obj_laser podczas kolizji z rakietką. Rakietka ma tylko kod odpowiedzialny za zmianę/obrót o 90 stopni GML if (other.sprite_index=spr_lrocket4){ x=other.x+12 y=other.y+12 if hspeed=5{ hspeed=0; vspeed=-5; } else if vspeed=5{ vspeed=0; hspeed=-5;} else if vspeed=-5 or hspeed=-5 instance_destroy() } if (other.sprite_index=spr_lrocket1){ x=other.x+12 y=other.y+12 if vspeed=5{ vspeed=0; hspeed=5; } else if hspeed=-5{ hspeed=0; vspeed=-5;} else if vspeed=-5 or hspeed=5 instance_destroy() } if (other.sprite_index=spr_lrocket2) { x=other.x+12 y=other.y+12 if hspeed=-5{ hspeed=0; vspeed=5; } else if vspeed=-5{ vspeed=0; hspeed=5;} else if vspeed=5 or hspeed=5 instance_destroy() } if (other.sprite_index=spr_lrocket3) { x=other.x+12 y=other.y+12 if vspeed=-5{ vspeed=0; hspeed=-5; } else if hspeed=5{ hspeed=0; vspeed=5;} else if vspeed=5 or hspeed=-5 instance_destroy() } Obrazek, pokazujący co się dzieje Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
R.o.b Opublikowano 29 Czerwca 2014 Autor Udostępnij Opublikowano 29 Czerwca 2014 Przepraszam, za doubleposta... od jakiegoś czasu próbuję rozwiązać problem, ale nie udaje mi się. Zdaję mi się, że jest to problem z kolizją. Wydaje się to dziwne, ale jak próbowałem zrobić coś takiego w GM8 wszystko działało jak powinno. Mógłby ktoś rzucić na to okiem? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 29 Czerwca 2014 Udostępnij Opublikowano 29 Czerwca 2014 Skoro nikt Ci nie chce odpisać, może się okazać, że niedokładnie lub nieczytelnie opisałeś swój problem. Dodatkowo twój kod jest mega nieczytelny. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
R.o.b Opublikowano 29 Czerwca 2014 Autor Udostępnij Opublikowano 29 Czerwca 2014 W takim razie jeszcze raz. Mój problem polega na tym, że biały obiekt (obj_laser) ma się odbić od tego 'trójkątnego' czegoś. Kod, który napisałem ma za zadanie sprawdzić jaki sprite ma 'trójkąt', potem ustawić laser na środku kratki z trójkątem i zmienić jego hspped oraz vspeed lub usunąć 'laser', gdy ten będzie uderzał w ścianę 'trójkąta (czyli, patrząc na obrazek - z lewej strony i z dołu). Mój problem polega na tym, że w GMS to się buguje. W poprzednim projekcie w GM8 działało to prawidłowo. Laser zostaje przeniesiony (grzebałem jeszcze trochę nad tym), ale blokuje się w pozycji 'środka' kratki. Zrobiłem do 'trójkąta' maski tak, żeby laser się wtedy z nim nie stykał, ale nadal występuje ten sam problem. E. Wrzucam screena. Tak zostaje i potem 'laser' nie rusza się, obok narysowana maska Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 29 Czerwca 2014 Udostępnij Opublikowano 29 Czerwca 2014 dokladnie tak, nieodpowiadalem bo mialem nadzieje, ze tylko ja nierozumiem :) jak bawisz sie maskami to domyslanie jest duzo wiecej komplikowane, najlepsiej daj przyklad by moc sprawdzic co trza do odpowiedzi. z obrazku wynika, ze laser ma kontakt z zwierciadlem w zlym miescu, tak? to kdzie jest ta rakietka? albo te trojkoty to majo byc rakietky? to kdzie so zwierciadla? po co rakietka ma odbijac laser? dlaczego uzywa hspeed i vspeed zamiast speed+direction? ... i dalsze glupie pytania mnie nawiedzajo jak patrze na 1. post :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
R.o.b Opublikowano 29 Czerwca 2014 Autor Udostępnij Opublikowano 29 Czerwca 2014 Trójkąt jest zwierciadłem-rakietką, zależnie od tego, z której strony ma paść na niego laser. W ogóle kolizja tych dwóch obiektów wydaje się dziwna. Laser przeskakuje do pozycji wyznaczonej przez GML x=other.x+12 y=other.y+12 Zanim 'dotknie' dokładnie trójkąta E: Screen pokazujący o co mi chodzi Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 29 Czerwca 2014 Udostępnij Opublikowano 29 Czerwca 2014 przepraszam, ale jak dla mnie to wcioz zamalo wiem. badz zrob maly przykladzik, albo poczekaj na kogos madrzejsiego odemnie :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matrix_ Opublikowano 29 Czerwca 2014 Udostępnij Opublikowano 29 Czerwca 2014 Najlepiej podaj przykład działający GM8, Również nie rozumiem czemu działasz na h/v speedach. Dużo razy szybciej zrobisz to na speed/direction. Poza tym będziesz miał większą dokładność odbicia. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 29 Czerwca 2014 Udostępnij Opublikowano 29 Czerwca 2014 Generalnie jak widzę kod napisany w taki sposób jak twój. Nieczytelny bez zastosowania żadnego ogólnie przyjętego formatowania kodu to omijam takie tematy szerokim łukiem. http://en.wikipedia.org/wiki/Programming_style Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 30 Czerwca 2014 Udostępnij Opublikowano 30 Czerwca 2014 Generalnie jak widzę kod napisany w taki sposób jak twój. Nieczytelny bez zastosowania żadnego ogólnie przyjętego formatowania kodu to omijam takie tematy szerokim łukiem. Kurcze, a ja ciąglę liczę na to że to źle ustawiony origin. :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 30 Czerwca 2014 Udostępnij Opublikowano 30 Czerwca 2014 Poprawiłem czytelność kodu, nie zmieniłem w nim żadnej funkcjonalności: GML switch other.sprite_index { case spr_lrocket1: { x = other.x+12; y = other.y+12 if vspeed = 5 {vspeed = 0; hspeed = 5} else if hspeed = -5 {hspeed = 0 vspeed = -5} else if(vspeed = -5)||(hspeed = 5) {instance_destroy()} break } case spr_lrocket2: { x = other.x+12; y = other.y+12 if vspeed = -5 {vspeed = 0; hspeed = 5} else if hspeed = -5 {hspeed = 0 vspeed = 5} else if(vspeed = 5)||(hspeed = 5) {instance_destroy()} break } case spr_lrocket3: { x = other.x+12; y = other.y+12 if vspeed = -5 {vspeed = 0; hspeed = -5} else if hspeed = 5 {hspeed = 0 vspeed = -5} else if(vspeed = 5)||(hspeed = -5) {instance_destroy()} break } case spr_lrocket4: { x = other.x+12; y = other.y+12 if vspeed = 5 {vspeed = 0; hspeed = 5} else if hspeed = 5 {hspeed = 0 vspeed = 5} else if(vspeed = -5)||(hspeed = -5) {instance_destroy()} break } default: break } Wiele rzeczy w twoim kodzie powtarza się niepotrzebnie. Zerknij na funkcję dot_product i zastanów się, w jaki sposób pomoże ci załatwić ten problem w jednej-dwóch linijkach. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
R.o.b Opublikowano 30 Czerwca 2014 Autor Udostępnij Opublikowano 30 Czerwca 2014 Wiem, że mój kod jest... okropny, ale nie jest to głównym źródłem problemu. Później jeszcze pobawię się, żeby go skrócić, zoptymalizować i co się da. Spróbowałem zrobić plik z 2 obiektami w GM8 - działa. Później zimportowałem go do GMS - działa. Dodałem do nowego projektu wszystkie obiekty, sprite'y itd. jak w projekcie, w którym nie działało - działa... Sam nie wiem co pochrzaniłem. Dodaję projekty, może ktoś ogarnie, co zrobiłem źle i mnie oświeci :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 30 Czerwca 2014 Udostępnij Opublikowano 30 Czerwca 2014 Tak jak by działa. Może masz jakąś starą wersję GMS z bugiem? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 30 Czerwca 2014 Udostępnij Opublikowano 30 Czerwca 2014 w starym projekcie sprajty masek mają ustawione prostokątne maski zamiast precyzyjnych 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ę