Sutikku Opublikowano 4 Marca 2016 Udostępnij Opublikowano 4 Marca 2016 Nie wiedziałem jak nazwać tytuł, może mało mówi. Jeśli kojarzycie gry jak robocraft, starmade, space engineers etc. to wiecie o co chodzi. W tego typu grach, buduje się jeden wielki statek/czołg/cokolwiek, przez łączenie ze sobą klocków, a także silniki, działka itd. Jak takie coś w teorii mogłoby wyglądać w gmie? Masa obiektów-parentów i jeden obiekt-matka? Czy może obiekty byłyby tylko rysowane, a w rzeczywistości byłby tylko jeden obiekt? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matrix_ Opublikowano 4 Marca 2016 Udostępnij Opublikowano 4 Marca 2016 Myślę że najłatwiej byłoby przechowywać wszystkie bloczki w ds_map i gra zapisuje to w pliku, a później odczytuje ustawienie... Jeżeli w 2D to chyba najłatwiej byłoby zrobić to w draw, nie zaśmieca się gry kolejnymi obiektami, a w mulcie to bardzo by przymulało... A kolizja po prostu jedna dla całego statku, chyba że byłoby potrzebne coś więcej... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 4 Marca 2016 Autor Udostępnij Opublikowano 4 Marca 2016 Pytanie brzmi jak zrobić jedną kolizję dla całego statku. W sensie, ja nie wiem jak takie coś zrobić i chciałbym usłyszeć jak mniej-więcej inni by to wykonali. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 4 Marca 2016 Udostępnij Opublikowano 4 Marca 2016 Jak z kilku obiektów chcesz zrobić jeden i trzymać to w jakieś tablicy liście czy cokolwiek to chyba poligonami(chyba ta nazwa) najlepiej, jeśli obiekty to prostokąty to możesz sprawdzać kolizje dla każdego + jakaś optymalizacja Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matrix_ Opublikowano 4 Marca 2016 Udostępnij Opublikowano 4 Marca 2016 Pytanie brzmi jak zrobić jedną kolizję dla całego statku. W sensie, ja nie wiem jak takie coś zrobić i chciałbym usłyszeć jak mniej-więcej inni by to wykonali. Po prostu kodem ustaw sobie jakąś kolizję np. collision_rectangle albo elipse... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 4 Marca 2016 Autor Udostępnij Opublikowano 4 Marca 2016 Collision_rectangle() nie podejdzie, bo jeśli cały twór nie będzie jednym wielkim prostokątem, tylko np. jeżdżącym krzyżem, to nie będzie to tak działało jak sobie wymarzę. Zastanawiałem się też jak zrobić taki efekt (uwaga, rozrysuję) x-x-x-x Przyjmijmy, że to jest podstawowy stateczek. I teraz blok nr. 2 zostaje zniszczony (licząc od lewej) Czyli tak x---x-x No ale skoro nie ma żadnego pośrednika między 1, a 3 blokiem, to pierwszy też powinien odpaść. Czyli koniec końców ----x-x Dlatego chyba zrobię statek, który będzie składał się z obiektów, każdy obiekt który jest na zewnątrz będzie sprawdzał kolizję z laserem, rakietą czy co tam będzie. Jeśli takowa zajdzie, to ten się zniszczy. Tylko nie wiem jak osiagnąć coś takiego, co przedstawiłem wyżej. Czymś w rodzaju automatu komórkowego? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 4 Marca 2016 Udostępnij Opublikowano 4 Marca 2016 A jak w końcu statek rozpadnie się na 2 połowy to która "odpadnie"? Masz coś takiego jak "główny komputer" coś co stanowi główną część statku? Jak poczekasz to o 23 ci coś mogę napisać albo jutro. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 4 Marca 2016 Autor Udostępnij Opublikowano 4 Marca 2016 Ja na razie nic nie mam. Zabierałem się do czegoś takiego z dwa razy, ale właśnie ostatecznie nie wiem jak to osiągnąć, dlatego postanowiłem napisać na forum. I główny obiekt będzie (czyli em, miejsce siedzenia dla pilota) Tak żeby nie było żadnych niedomówień, od razu dodam, że gra 2D. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 4 Marca 2016 Udostępnij Opublikowano 4 Marca 2016 x-x-x-x Przyjmijmy, że to jest podstawowy stateczek. I teraz blok nr. 2 zostaje zniszczony (licząc od lewej) Czyli tak x---x-x No ale skoro nie ma żadnego pośrednika między 1, a 3 blokiem, to pierwszy też powinien odpaść. Czyli koniec końców ----x-x Na myśl mi przychodzi by każdy blok wiedział z iloma się łączy. I po oddzieleniu odrzucana była by ta część która ma mniej połączeń. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 4 Marca 2016 Autor Udostępnij Opublikowano 4 Marca 2016 Na myśl mi przychodzi by każdy blok wiedział z iloma się łączy. I po oddzieleniu odrzucana była by ta część która ma mniej połączeń. Tzn. dominującą częścią będzie ta posiadająca główny moduł, więc bez różnicy, bo może być sytuacja w której ten dominujący będzie mniejszy. Tylko w jaki sposób sprawdzać, czy ma ona jakieś połączenie z nim? Chociaż jak tak pomyślę to wpadł mi taki pomysł. Na początku stepa, zeruje wszystkim zmienną kontrolującą czy są połączeni (nazwijmy ją con). Wtedy wszystkie bloki biorą con sąsiadujących bloków. Czyli najpierw od głównego bloku (w którym con zawsze 1) biorą sąsiedzi, a potem sąsiedzi tych sąsiadów. Jeśli któryś się odłączy, to nie będzie miał sąsiada z con=1. Przejdzie taki pomysł? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 5 Marca 2016 Autor Udostępnij Opublikowano 5 Marca 2016 Podbijam temat, bo natknąłem się na problem. Chcę, by całość się obracała. Więc oczywiście image_angle=glowny_obiekt.image_angle; Ale to oczywiście nie do końca jest tak jak powinno. W sumie w ogóle to nie wygląda. No i dochodzę do wniosku, że trzeba zmieniać pozycję x i y, jakoś lengthdirami. Ale nie wiem jak to zrobić. Pomoże ktoś? Robiłem tak, że lengthdir(distance_to_object(glowny_obiekt), image_angle);, ale to nie jest dobry sposób, obiekty są wtedy w dziwnych pozycjach. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 5 Marca 2016 Udostępnij Opublikowano 5 Marca 2016 distance_to_object mierzy dystans od maski do maski. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 5 Marca 2016 Udostępnij Opublikowano 5 Marca 2016 GML _dist = point_distance(x, y, glowny_obiekt.x, glowny_obiekt.y); x = glowny_obiekt.x + lengthdir_x( _dist, glowny_obiekt.image_angle ); y = glowny_obiekt.y + lengthdir_y( _dist, glowny_obiekt.image_angle ); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 5 Marca 2016 Autor Udostępnij Opublikowano 5 Marca 2016 To też nie działa, bo teraz obiekty ustawiają się w jednej linii. W sensie, jeśli wcześniej był np. kwadrat 3x3 z głównym obiektem po środku, teraz jest główny obiekt i jakby jeden bloczek w prawo. Myślałem też, żeby zamiast ogólnego _dist, mieć abs(glowny_obiekt.x-x) i tak samo z y, ale to też nie. Dochodzę do wniosku, że do lengthdirOw, trzeba dodać początkowy point_direction(x,y,glowny.x,glowny.y), ale nie wiem jak go ustalić, że to jest ten "początkowy", bo inaczej to wyjdzie mi tak. Zmieniam image_angle Zmieniam x i y zmieniam image_angle o to zmienione x i y zmienian znowu x i y itd.itd. edit: jak tak patrzę, to napisałem chyba jakieś głupoty tam wyżej, w każdym razie, to rozwiązanie edie, nadal nie działa Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 5 Marca 2016 Udostępnij Opublikowano 5 Marca 2016 Zapomniałem jak się lengthdir'ów używało :D GML (CREATE) _dist = point_distance(x, y, glowny_obiekt.x, glowny_obiekt.y) _dir = point_direction(x, y, glowny_obiekt.x, glowny_obiekt.y) GML (STEP) x = glowny_obiekt.x + lengthdir_x(_dist, glowny_obiekt.image_angle+_dir) y = glowny_obiekt.y + lengthdir_y(_dist, glowny_obiekt.image_angle+_dir) image_angle = glowny_obiekt.image_angle Teraz powinno chadziać :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 5 Marca 2016 Autor Udostępnij Opublikowano 5 Marca 2016 Zapomniałem jak się lengthdir'ów używało :D GML (CREATE) _dist = point_distance(x, y, glowny_obiekt.x, glowny_obiekt.y) _dir = point_direction(x, y, glowny_obiekt.x, glowny_obiekt.y) GML (STEP) x = glowny_obiekt.x + lengthdir_x(_dist, glowny_obiekt.image_angle+_dir) y = glowny_obiekt.y + lengthdir_y(_dist, glowny_obiekt.image_angle+_dir) image_angle = glowny_obiekt.image_angle Teraz powinno chadziać :) Dzięki edie, działa idealnie :) Mam teraz tylko jakieś problemy z samym działaniem budowania tych statków, ale to tam. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 5 Marca 2016 Udostępnij Opublikowano 5 Marca 2016 A tak ogólnie to złożone transformacje robi się na macierzach ale to za trudne nawet dla mnie, więc tylko tak wspomnę że coś takiego istnieje i GM ma jakąś obsługę macierzy wbudowaną :P 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ę