MetalowyNerd Opublikowano 10 Stycznia 2016 Udostępnij Opublikowano 10 Stycznia 2016 Witam. Jestem nowy w GameMaker: Studio i szukałem już chyba wszędzie (głównie po angielsku) odpowiedzi na moje pytanie. W projekcie wykorzystuję dwa obiekty: - Statek - Działko Gdy gra zostaje odpalona, tworzy się Statek, a ten od razu na swojej pozycji musi stworzyć Działko. Gdy statek się przemieszcza, działko powinno się przemieszczać razem z tym Statkiem, jednak chciałbym to zrobić tak, żeby to pozycja x i y "twórcy" tego Działka była również pozycją Działka, nie chcę, żeby Działko miało pozycję Statku, gdyż planuję stworzyć w którymś poziomie kilka takich Statków, w którym każde ma swoje Działko. Proszę o pomoc, bo już załamany jestem, a bardzo chcę rozpocząć ten projekt. Wydawało się to takie proste... że wystarczy wpisać w Działko>Draw>Skrypt: x = parent.x; y = parent.y; Pozdrawiam MetalowyNerd. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 10 Stycznia 2016 Udostępnij Opublikowano 10 Stycznia 2016 Jak tworzysz działo to można mu przypisać id statku tak by wiedziało kto go stworzył. GML (Statek) var ins; ins = instance_create(x, y, dzialo); ins.statekID = id; Teraz nowo stworzone działo zna id swojego stwórcy, więc można je przesuwać gdy stwórca się przesuwa: GML (Dzialo step) x = statekID.x; y = statekID.y; Ale w przyszłości żeby uniknąć błędu o nie znalezionej instancji gdy statek zginie to warto sprawdzać jeszcze czy ten statek istnieje zanim się przesunie działko GML (Dzialo step) if ( instance_exsists(statekID) ) { x = statekID.x; y = statekID.y; } else instance_destroy(); // jak statek nie istnieje to zniszcz tez dzialo Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MetalowyNerd Opublikowano 10 Stycznia 2016 Autor Udostępnij Opublikowano 10 Stycznia 2016 Dziękuję za szybką i konkretną odpowiedź. Wszystko działa, jak powinno :). Pozdrawiam bardzo serdecznie :lol: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MetalowyNerd Opublikowano 10 Stycznia 2016 Autor Udostępnij Opublikowano 10 Stycznia 2016 A mam jeszcze jedno pytanie. Mianowicie kiedy tworzę Statek i chcę, żeby Działo było na jego jednym skrzydle i obracało się razem ze Statkiem jednak pozostając na skrzydle, to jakich komend muszę użyć? Próbuję z statekID.direction/image_angle, ale nawet na logikę to nie ma prawa działać <_< . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 10 Stycznia 2016 Udostępnij Opublikowano 10 Stycznia 2016 Nie jestem pewien czy wiem co chcesz osiągnąć. Ale tak tłumacząc trochę prościej. Mamy statek i dzielimy go na 3 pola jakby. Lewo, środek, prawo. I działo ma być zawsze przyczepione do prawej strony, nawet jeśli obracamy statkiem. Tutaj potrzebne będą lengthdiry. Jeśli przyjmiemy, że jedno pole jest równe kratce 64x64, to wydaje mi się, że powinno to wyglądać tak. GML var xx=statek.x+lentghdir_x(64, image_angle); var yy=statek.y+lengthdir_y(64, image_angle); dzialo.x=xx; dzialo.y=yy; Działa? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MetalowyNerd Opublikowano 10 Stycznia 2016 Autor Udostępnij Opublikowano 10 Stycznia 2016 Sutikku, niestety nie działa. Chyba, że to ja coś źle zrobiłem. Statek(o_turret2/step): GML //x = statekID.x; //y = statekID.y; var xx=statekID.x+lengthdir_x(64, image_angle); var yy=statekID.y+lengthdir_y(64, image_angle); if ( instance_exists(statekID) ) { //x = statekID.x; //y = statekID.y; x=xx; y=yy; } else instance_destroy(); image_angle = direction; direction = point_direction(x,y,mouse_x,mouse_y); W sumie sprite tego statku ma rozmiary 32x32. Nie wiem, czy to coś wniesie do tematu :/. Chodzi mi o coś w tym stylu: [czerwony = działko, niebieski = środek sprite'a Statku] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
poikarz Opublikowano 10 Stycznia 2016 Udostępnij Opublikowano 10 Stycznia 2016 Zakładając, tak jak pisałeś, że masz rozmiar sprita ustawiony na 32x32 i jest wycentrowany: GML x = statekID.x+7; y = statekID.y+7; Gdzie siódemki to po prostu jak daleko od 'centrum' sprite'a ma się utrzymywać obrazek działa. Spróbuj i daj znać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MetalowyNerd Opublikowano 10 Stycznia 2016 Autor Udostępnij Opublikowano 10 Stycznia 2016 Tak już próbowałem, ale nie chodzi mi o to, żeby działko podążało za statkiem, jak dron, tylko żeby było częścią statku i obracało się razem ze skrzydłem statku, gdy ten się obraca. Chodzi mi po prostu o to, żeby działko miało wspólne "centrum" rotacji ze statkiem. Żeby było jakby "przyklejone" do skrzydła statku. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 10 Stycznia 2016 Udostępnij Opublikowano 10 Stycznia 2016 Użyj statekID.image_angle w tych lengthdirach edit GML var xx=statekID.x+lengthdir_x(64, statekID.image_angle); var yy=statekID.y+lengthdir_y(64, statekID.image_angle); tak dokładnie powinno wyglądać (chyba) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 10 Stycznia 2016 Udostępnij Opublikowano 10 Stycznia 2016 Wstaw sprite statku, bo tam trzeba zmierzyć pixele żeby dobrze punkty zaczepu zrobić. Można to zmierzyć w niektórych programach graficznych np paint.net albo samemu wyliczyć matematycznie w ten sposób: https://forum.gmclan.org/index.php?showtopi...=lenghtdir+info Do lengthdira trzeba znać długość lini i kąt od środka sprita statku do punktu zaczepu. Pokażę na screenie jak się mierzy w paint.net, na dole na pasku stanu są te wartości podane gdy weźmiemy narzędzie linia i tą linię narysujemy ze środka sprita do punktu zaczepu. Zalecam jednak sprit obrócić tak by dziób był w prawą stronę bo tam GM ma kąt zero. Jak sprit jest odwrócony w górę to trzeba odejmować -90 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MetalowyNerd Opublikowano 12 Stycznia 2016 Autor Udostępnij Opublikowano 12 Stycznia 2016 Dziękuję wszystkim za konkretną pomoc :) .I am Lord, teraz czaję, jak to działa dzięki. Nie działało mi, ale to dlatego, że Sutikku mi troszkę błędny kod podał, bo zamiast "var xx" użyłem po prostu "x" xd i tak samo z "var y". Mimo to bardzo Wam dziękuję za pomoc i wrzucam kod działka, które poprawnie trzyma się punktu, który wyznaczyłem: GML if ( instance_exists(statekID) ) { x=statekID.x+lengthdir_x(30, statekID.image_angle+30); y=statekID.y+lengthdir_y(30, statekID.image_angle+30); } else instance_destroy(); image_angle = direction; direction = point_direction(x,y,mouse_x,mouse_y); Pozdrawiam serdecznie i jeszcze raz dziękuję :thumbsup: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 12 Stycznia 2016 Udostępnij Opublikowano 12 Stycznia 2016 Zamień jeszcze kolejnością to: GML direction = point_direction(x,y,mouse_x,mouse_y); image_angle = direction; Bo nie ma sensu że dopiero później wyliczasz kierunek. A w ogóle to jeżeli działko w żaden inny sposób się nie porusza i jeżeli nie ma z niczym kolizji (czyli praktycznie tylko je rysujesz) to nie zmieniaj direction i od razu rób: GML image_angle = point_direction(x,y,mouse_x,mouse_y); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MetalowyNerd Opublikowano 12 Stycznia 2016 Autor Udostępnij Opublikowano 12 Stycznia 2016 Threef ok. Dzięki już poprawiłem. Faktycznie lepszy krótszy kod, który działa tak samo ;), niż dłuższy. 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ę