Skocz do zawartości

Teoria budowania statków z części


Rekomendowane odpowiedzi

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

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

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

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

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ń.

 

ZBAeVFj.jpg

Odnośnik do komentarza
Udostępnij na innych stronach

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

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

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

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

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...