MeloPL Opublikowano 16 Sierpnia 2009 Udostępnij Opublikowano 16 Sierpnia 2009 Witam, od niedawna postanowiłem stworzyć grę, ciachankę, czy jak by to nazwać. No, w każdym razie mam problem właśnie z tym ciachaniem (brak wiedzy/umiejętności :( ). Jak (dla mnie :>) wiadomo, jestem bardzo początkujący, no i nieraz mam problemy z drobnostkami. W tym momencie mam jednak problem z (moim zdaniem) większym kawałkiem do zgryzienia, no... Koniec przedmowy. A więc problem polega na tym, że kompletnie nie potrafię zrobić skryptu dla ostrza (tego: http://img40.imageshack.us/img40/3480/ostrze.png ), który ma odpowiadać za to, by przy ruchu myszką w tył, skręciło ono w dół (z punktem środka* w lewym, dolnym rogu sprite'a), ciachając przy tym przeciwnika, a przy ruchu myszki w przód, skręciło ono w górę, nic nie robiąc przeciwnikowi (znowu z tym samym punktem środka na sprite'cie). * to, co nazywam punktem środka, ma odpowiadać temu, co (na przykład) jest w karuzeli, na jej środku; to, co się kręci, do czego są przypięte wagony (taki jakby kręcący się drążek). Trzeba sobie to wyobrazić, jak wygląda, by zrozumieć, bo ja sam dobry w tłumaczeniu niestety nie jestem. :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matyxon Opublikowano 16 Sierpnia 2009 Udostępnij Opublikowano 16 Sierpnia 2009 Create: Speed = 5 Step: direction = point_direction(x,y,mouse_x,mouse_y) image_angle = direction To nie dokładnie to czego chciałeś ale może ci się przydać Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MeloPL Opublikowano 16 Sierpnia 2009 Autor Udostępnij Opublikowano 16 Sierpnia 2009 No, sporo jest rozwiązane dzięki tobie Matyxon, dzięki. :D Jednak ten create nie jest mi potrzebny, bo nie chce, by ostrze chodziło w stronę kursora :P Teraz tylko kwestia tego, żeby po dotknięciu przeciwnika od prawej strony sprite'a, on (przeciwnik) ginął, a przechodząc od lewej-do prawej strony sprite'a (poprzez przekręcenie się ostrza z dołu na górę), przeciwnikowi nic się nie stało. Sądzę, że z resztą sobie poradzę, tyle, że potrzebuję jedynie skryptu na to, by po dotknięciu maksymalnie prawego piksela sprite'a do przeciwnika, wróg ginął. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matyxon Opublikowano 16 Sierpnia 2009 Udostępnij Opublikowano 16 Sierpnia 2009 if point_direction(x,y,other.x,other.y)<direction+16 && point_direction(x,y,other.x,other.y)>direction-16 { other.instance_destroy() } Nie jestem pewien czy zadziała Edit: Chyba po raz pierwszy ktoś mi podziękował O.o, dzięki Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MeloPL Opublikowano 16 Sierpnia 2009 Autor Udostępnij Opublikowano 16 Sierpnia 2009 Eh, nie działa. Błąd jest w linijce z "other.instance_destroy()", o treści "Variable name expected." Gdy skrypt przepisalem zamiast na step ostrza, do step przeciwnika, "other" z "other.instance_destroy()" wymazałem, a inne "other" zastąpiłem nazwą ostrza "ostrze" (lub nawet bez wymazywania tych innych "other"), do błędu przy uruchamianiu nie było, ale gdy ostrze dotknęło przeciwnika, nic się nie działo. Dzięki za pomoc i tak :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matyxon Opublikowano 16 Sierpnia 2009 Udostępnij Opublikowano 16 Sierpnia 2009 Nie wiem jak działa, pewnie fuks i tyle ;p ale lepiej nie zostawiaj nic przypadkowi. zamien other.instance_destroy() na with(other) { instance_destroy() } lepiej napraw, bo mogą być błędy jak będzie więcej wrogów. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MeloPL Opublikowano 16 Sierpnia 2009 Autor Udostępnij Opublikowano 16 Sierpnia 2009 Niby działa, ale tylko w jedną stronę, no i pod jednym, jedynym warunkiem. W jedną stronę, czyli wtedy, gdy ostrze z prawej strony dotknie przeciwnika, nie ważne, czy wcześniej przejdzie w niego od lewej strony. Chodzi o to, żeby po przejściu przez lewą stronę sprite'a do prawej, przeciwnikowi nic się nie stało, a dopiero od prawej do lewej zostałby on (przeciwnik) przecięty. A warunek, żeby to działało, to - trzeba powoli ruszać myszką, bo szybkim zamachem w cale nic się nie zrobi przeciwnikowi. Jeśli nic się nie uda zrobić, to zmienię sprite ostrza, by atakowało ono z lewej i z prawej strony, a cały skrypt się uprości. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PoxiPol Opublikowano 17 Sierpnia 2009 Udostępnij Opublikowano 17 Sierpnia 2009 Masz przecierz collision circle, do do szybkiego machania. Lecz co do ciachania w jedna strone nie mam glowy : P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 17 Sierpnia 2009 Udostępnij Opublikowano 17 Sierpnia 2009 Za bardzo nie mogę zaczaić tych Twoich wypowiedzi, MeloPL, ale wydaje mi się, że Tobie chodzi o to, że jak ostrze jest po prawej stronie przeciwnika, to mu nic się nie dzieje, a jak przejdzie od prawej do lewej, to go przecina. Dobrze mi się wydaje? xD Jeśli tak, to przy kolizji z wrogiem sprawdzaj, czy poprzednie x ostrza było za prawą połową, a aktualne x jest na lewej połowie, jeśli tak to go ucinaj, jeśli nie, to nic nie rób. Chyba dobrze :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MeloPL Opublikowano 17 Sierpnia 2009 Autor Udostępnij Opublikowano 17 Sierpnia 2009 No, napiszę dokładniej, bo faktycznie, czasami sam siebie nie rozumiem. :D No, a więc, jeśli ostrze tylko dotknie prawą stroną, ale nie przejdzie z prawej do lewej, to nic się nie dzieje, tak samo, jak przejdzie z lewej do prawej - też nic się nie dzieje. Jedynie, jeśli ostrze przejdzie z prawej do lewej, to coś się stanie. No, to o to mi chodzi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 17 Sierpnia 2009 Udostępnij Opublikowano 17 Sierpnia 2009 To stwierdzenie które podałem, jest prawidłowe (na pewno, bo sprawdziłem :]). Pozdrawiam Bedi :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MeloPL Opublikowano 17 Sierpnia 2009 Autor Udostępnij Opublikowano 17 Sierpnia 2009 Hm, a jak się nazywają funkcje, dzięki którym będę mógł napisać, gdzie znajduje się x ostrza (czy jak to tam jest :) )? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 17 Sierpnia 2009 Udostępnij Opublikowano 17 Sierpnia 2009 GML if (xprevious > obj_wrog.x && x < obj_wrog.x) { //usuwaj wroga czy tam rań :P } tylko origin wroga musi być na środku :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matyxon Opublikowano 17 Sierpnia 2009 Udostępnij Opublikowano 17 Sierpnia 2009 if x>other.x { instance_destroy() } w kolizji @Up: Szybciej ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 17 Sierpnia 2009 Udostępnij Opublikowano 17 Sierpnia 2009 To Twoje, Matyxon powoduje, że jak będzie po prawej stronie to go usuwa <_< Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MeloPL Opublikowano 17 Sierpnia 2009 Autor Udostępnij Opublikowano 17 Sierpnia 2009 Em, no to napisałem w ten sposób w obiekcie "ostrze", w kolizji z wrogiem: GML if (xprevious > obj_wrog.x && x < obj_wrog.x) {with(obj_wrog) { instance_destroy() }} wróg_spr ma wycentrowany origin. Jednak wrogowi nic się nie dzieje, nie ważne, jak się najedzie tym ostrzem, czy się przetnie, czy nie. Mogę wysłać nawet projekt. :) Edit. Dodałem możliwość poruszania się ostrza za pomocą klawisza lewego i prawego (w prawą i lewą stronę). Okazało się, że gdy przechodzę nie ruszając myszką w prawą stronę (z prawej, do lewej strony ostrza), nic się nie dzieje, ale za to, jeśli zajdę wroga (bez ruszania myszką, tylko samymi klawiszami, poruszając się w lewo/prawo, a nie obracając się) lewą stroną ostrza, idąc w lewo, to przy dotknięciu (lewej strony ostrza) wróg ginie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 17 Sierpnia 2009 Udostępnij Opublikowano 17 Sierpnia 2009 Ja robiłem z with(other) i działało ale nie na każdym, tylko po kolei, tak jak tworzyłem w roomie. Nie wiem czym to jest spowodowane. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MeloPL Opublikowano 17 Sierpnia 2009 Autor Udostępnij Opublikowano 17 Sierpnia 2009 Oki, odwróciłem znaczki mniejszości/większości, i działa prawidłowo tylko przy ruszaniu klawiszami lewa-prawa, ale gdy ruszę ostrzem myszką za pomocą skryptu, który mi napisał Matyxon (dzięki) "direction = point_direction(x,y,mouse_x,mouse_y) image_angle = direction", nic się nie dzieje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matyxon Opublikowano 17 Sierpnia 2009 Udostępnij Opublikowano 17 Sierpnia 2009 pokaż gre Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MeloPL Opublikowano 17 Sierpnia 2009 Autor Udostępnij Opublikowano 17 Sierpnia 2009 Oto projekcik: http://wyslijto.pl/plik/whw6hd89ct (wciśnięcie "R" restartuje poziom) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matyxon Opublikowano 17 Sierpnia 2009 Udostępnij Opublikowano 17 Sierpnia 2009 po prostu wywal kod Beda ustaw BoundingBox na samo ostrze i w collision daj instance_destroy() Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MeloPL Opublikowano 17 Sierpnia 2009 Autor Udostępnij Opublikowano 17 Sierpnia 2009 Ale wtedy, jeśli uderzę ten obiekt tyłem ostrza, to przeciwnik od razu ginie. Mogę to zastosować ew. wtedy, gdy będzie się miało miecz, a nie jedno ostrze. Nie ma naprawdę jakiegoś sposobu, by to zadziałało na tym ostrzu w taki sposób, jak tego chcę? ;/ Edit. A jeśli zastosuję miecz, to jeśli będę chciał, by jednym zamachem-dotykiem zabrało się 1 hp z 10, to przecież skrypt będzie się powtarzał w bardzo szybkim tempie, bo kolizja ostrza z wrogiem trwałaby dalej. Jest kolizja - traci się 1 hp, ale jeśli dalej jest kolizja, to dalej traci się po 1 hp, aż w krótkiej chwili przeciwnik ginie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matyxon Opublikowano 17 Sierpnia 2009 Udostępnij Opublikowano 17 Sierpnia 2009 tak dodaj do kolizji jeszcze to if direction > point_direction(x,y,o_Wrog.x,o_Wrog.y) { niszczenie } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cekol Opublikowano 17 Sierpnia 2009 Udostępnij Opublikowano 17 Sierpnia 2009 Kolizja ostrza z głową: GML kierunek = point_direction(x,y,other.x,other.y) if DirDiv(kierunek,direction+90)<DirDiv(kierunek,old_direction+90)>0 {with(other) { instance_destroy() }} Create ostrza: GML old_direction=0 Step ostrza: GML old_direction= direction direction = point_direction(x,y,mouse_x,mouse_y); image_angle = direction; Oraz skrypt "DirDiv" GML var dif if(argument1>argument0+180) { dif=-((360-argument1)+argument0) } else{ if(argument0>argument1+180) { dif=((360-argument0)+argument1) } else{ dif=argument1-argument0 } } return dif U mnie działa :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MeloPL Opublikowano 17 Sierpnia 2009 Autor Udostępnij Opublikowano 17 Sierpnia 2009 Łał, naprawdę działa! :o Dzięki ci wielkie! Teraz sobie poczytam twój skrypt, by się na przyszłość dowiedzieć, jak go napisać. Stokrotne dzięki, naprawdę! :) 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ę