Mam mechanikę gry „ameba”. Masz pomysł, jak go wdrożyć?

19

Poza klonem tetris , kiepską strzelanką 2D z góry i niektórymi bałaganami z takimi rzeczami jak Unity i Flixel, zdaję sobie sprawę, że jeszcze nie ukończyłem jednej , dopracowanej gry z dzwonkami i gwizdkami. Chcę to zmienić i mam pomysł na mój następny projekt.

Chodzi o to, że jesteś amebą. Ameba ma te rdzenie przypominające oczy (lub coś w tym rodzaju, nie znam biologii), a ty masz ich dwa. Kontrolujesz jedno za WASDpomocą drugiego za pomocą IJKL. Wokół każdego rdzenia musi być stały promień rzeczy :

2meba1

A obszar ameby musi pozostać stały. Jeśli więc przesuniesz rdzeń w jednym kierunku, zwiększysz obszar ameby, ale wzrost ten zostanie skompensowany spadkiem w innym miejscu:

2meba2

Aaaaa i chciałbym wprowadzić mechanikę waginacji . Pochłaniasz rzeczy, pochłaniając je, jak szef. Może nawet dodatkowy rdzeń lub igła, która cię wyrywa i powoduje, że wszystkie twoje wewnętrzne rzeczy zaczynają tryskać :

2meba3

Ale jest problem: nie wiem, jak to zrobić. Chciałbym jednak kilka pomysłów, jak to wdrożyć. Czy powinienem odkrywać biblioteki fizyki, takie jak Box2D? A może coś związanego z fizyką płynów? Każda pomoc byłaby mile widziana.

PS Zapraszam do kradzieży tego pomysłu. Mam mnóstwo pomysłów. Jeśli to zrobisz, powiedz mi, jak to zrobiłeś, abym mógł spróbować sam.

Jason Tu
źródło
3
Noun- i czasownik postacie są wgłobienie i wgłębi odpowiednio waszej informacji. (Zrobiłem biologię.) Ładne zdjęcia.
Inżynier
2
skąd masz ten słodki czarny papier?
brendan
5
@brendan: Jeśli zamienisz czarny na biały, czerwony na niebieski i biały na czarny, stanie się bardziej widoczne, skąd wziął ten „czarny papier”. ;)
knight666
1
Jesteście zbyt sprytni: D
Jason Tu

Odpowiedzi:

16

Z góry mojej głowy wystaje klauzula, że ​​chcesz, aby obszar był stały. Uderza mnie to w tym wszystkim, więc spróbujmy znaleźć proste rozwiązanie tego problemu.

Weź kawałek sznurka i związaj końce razem, aby utworzyć koło. Mogę się mylić, ale moja intuicja mówi, że wnętrze tego sznurka ma stały obszar lub działałoby okropnie podobnie jak twoja granica ameby.

Powiedziałbym więc: zaimplementuj ciąg. ;) Większość bibliotek fizyki może wykonywać sprężyny (w Box2D wygląda to na odległość), a najłatwiejszym sposobem na utworzenie łańcucha jest połączenie wielu łańcuchów razem. Dołącz do ostatniego do pierwszego, aby utworzyć pętlę. Upewnij się, że sprężyny w sznurku mają wystarczająco wysoką stałą sprężyny, aby się nie rozdzieliły - chcesz, aby były dość sztywne i poruszały się zgodnie, aby się nie rozszerzały.

Następnie utwórz siły działające na łańcuch. Trywialnie, twoje dwa rdzenie / oczy / punkty kontrolne wytwarzają siły na punkty, które tworzą strunę. Spraw, aby siła spadła dzięki odwrotnej funkcji kwadratowej:

float forceOnPoint(point, ball)
{
  float d = distance(point, ball);
  return K / (d*d);
}

I kieruj siłę bezpośrednio z dala od oka / piłki kontrolnej, jak siła odstraszająca emanująca z piłki. Dostosuj K, aby kontrolować siłę siły. Upewnij się, że K nie jest zbyt wysoki - nie chcesz, aby został po prostu mocno wypchnięty przez siłę, po prostu trzymaj go z dala od piłek. Pozostaw dużo luzu w swoim sznurku.

Tylko z tymi dwoma najprawdopodobniej skończysz z dość jednolitym kształtem, więc sugeruję również, abyś stworzył słabsze siły wokół otaczającej „zupy”, aby zmienić kształt ameby. Możesz tworzyć losowe miejsca, zmieniać ich siłę regularnie (możesz sprawić, że będzie to funkcja sinusoidalna dla przyjemnych ruchów) i sprawić, by działały tak samo jak kule.

Vagination (fnarr): to jest trudne. Sprawiasz, że otacza on obiekt, sprawdzając, czy dwa nieprzylegające do siebie punkty na ciągu nie zbliżyły się wystarczająco, a jeśli tak, musisz:

Zmierz odległość między punktami na sznurku. Policz liczbę sekcji sprężyn. Znajdź „krótszą” ścieżkę od A do B.

Zerwij sznurek i połącz go ponownie z dwoma sąsiadującymi punktami. Innymi słowy, bezpośrednio połącz punkt A z punktem B i odrzuć wszystkie rzeczy między nimi.

Ponownie wstaw brakującą liczbę punktów (plus wszelkie dodatkowe punkty, jeśli chcesz zwiększyć rozmiar poprzez zjedzenie czegoś) do sznurka po drugiej stronie - tj. Stronie od B do A. Jeśli wstawisz je równomiernie na całej długości i aby były krótsze niż pożądana odległość między punktami, powinieneś uzyskać ładny efekt sprężystości-rozciągnięcia.

Myślę, że to wszystko obejmuje. Nawiasem mówiąc: pomysł brzmi niesamowicie.

Matt Kemp
źródło
18
FWIW, choć ogólnie podoba mi się to rozwiązanie, twoja intuicja dotycząca wnętrza struny o stałym polu jest błędna - okrąg ma maksymalny obszar poza dowolnym kształtem z tym związanym sznurkiem jako jego granicą. Najłatwiejszym sposobem na stwierdzenie, że jest różna, jest wyobrażenie sobie „ściskania” sznurka przez naprężenie dwóch końców; wtedy kształt, który uzyskasz (czy to prostokąt, elipsa, czy to, co masz) nigdy nie będzie szerszy niż połowa obwodu, ale jego wysokość kurczy się do zera, więc obszar (który jest ograniczony przez szerokość * wysokość) również kurczy się do zera.
Steven Stadnicki
1
Myślę, że miałeś na myśli „... aby utworzyć sznurek, to połączyć wiele sprężyn razem”.
Richard Marskell - Drackir
8

Aby symulować endocytozę (proces zjadania rdzeni zewnętrznych przez komórki), każdy rdzeń, zarówno wewnątrz, jak i na zewnątrz ameby, odepchnąłby granicę ameby. Rdzenie wewnątrz ameby będą miały umiarkowanie silny efekt odpychający, a te na zewnątrz będą miały niewielki efekt odpychający. Zilustrowano to poniżej.

wprowadź opis zdjęcia tutaj

Gdy zewnętrzny rdzeń (czerwony) zbliża się do ameby, jego odpychające pole utworzy okrągłe wcięcie w amebie. W końcu obie strony (podświetlone na zielono) będą się stykać. Po wykryciu takiej kolizji okrągłe wcięcie jest usuwane i cokolwiek z jego wnętrza jest zużywane.

To całkiem dobrze naśladuje proces endocytozy i daje przyjemny efekt wizualny.

Jeśli chodzi o symulowanie granicy ameby, podoba mi się pomysł Matta Kempa, aby użyć bardzo dużej liczby połączonych sprężyn. To nie utrzymuje stałego obszaru, ale stały obwód. W prawdziwym życiu woda może swobodnie przepływać do i z błony komórkowej (granica ameby), więc komórki nie mają stałej objętości.


Inne pomysły na realistyczną grę mogłyby w jakiś sposób modyfikować zawartość soli w komórkach. Gdy stężenie soli w środku i na zewnątrz komórki nie zgadza się, woda przepływa przez błonę komórkową w kierunku miejsca o wyższej zawartości soli w procesie zwanym osmozą. Jeśli ameba ma wysoką zawartość soli, miałaby większą objętość, ale obwód nie zmieniłby się. W grze można to zasymulować, nadając wewnętrznym rdzeniom większy efekt odpychania, jeśli zawartość soli jest wyższa.

Ponieważ wyższa zawartość soli dałaby rdzeniom większy efekt odpychania, ma tę zaletę, że ułatwia amebę. Mniejsza zawartość soli sprawiłaby, że ameba wyginała się i wyginała pod wpływem środowiska. Ma to tę zaletę, że łatwiej jest jeść inne rdzenie, ponieważ ameba byłaby w stanie łatwiej ją otoczyć.

PhiNotPi
źródło
3

Cóż, aby uzyskać efekt graficzny, najprawdopodobniej użyłbyś metaballów (jest dla nich mnóstwo samouczków online)

CobaltHex
źródło
2

Cóż, znam grę edukacyjną o nazwie CellCraft (bez związku z Minecraftem), która polega na kontrolowaniu podobnego do komórki stworzenia, które ma bardzo podobne ruchy do tego, czego potrzebujesz. Gra jest darmowa i prawdopodobnie ważniejsze jest to, że wyraźnie oświadczyli na swojej stronie, że zamierzają udostępnić kod źródłowy za darmo i został on stworzony w ActionScript 3 i jest grą flashową.

http://www.cellcraftgame.com/Home.html

Tenacious D
źródło
1

Chciałbym to zrobić, aby symulować pętlę struny podobną do sugerowanej przez Matta Kempa, ale wypełnić wnętrze cząsteczkami, które odpychają się nawzajem i struną. w ten sposób zapewnisz przybliżoną oszczędność objętości. Musisz zadbać o to, aby duże siły nie wyrzucały cząstek na zewnątrz.

Wyszukaj „wygładzoną hydrodynamikę cząstek”, aby uzyskać symulację cząstek, i „integrację Verleta”, aby zasymulować je (i ciąg). Verlet to technika oparta na pozycji, dzięki czemu jest bardzo prosta i stabilna.

Aby utrzymać wydajność, sugerowałbym system „jednolitego podziału przestrzennego siatki”. Ponownie, łatwe do wdrożenia i generuje świetne przyspieszenia.

Możesz także użyć metaballi do wizualizacji obiektu zamiast używać łańcucha. Ale wtedy masz problem polegający na tym, że cząsteczki mogą się rozdzielić na osobne grudki. Wyszukaj „Siły Van der Waalsa”, aby znaleźć równowagę przyciągania / odpychania prowadzącą do zlepiania się.

Innym podejściem byłoby zapewnienie niewielkiej siły „napompowującej” cząsteczki struny w kierunku ich „zewnętrznych” normalnych. To będzie symulować rodzaj wewnętrznej presji. W rezultacie pętla będzie próbowała utrzymać kształt koła. To co kiedyś za to .

Mam nadzieję, że to pomoże.

DaleyPaley
źródło