У мене є механік гри «амеба». Будь-яка ідея, як її реалізувати?


19

Поза клоном тетріса , шаленим 2D шутером зверху вниз та деяким возитися з такими речами, як Unity та Flixel, я розумію, що мені ще належить завершити єдину , відшліфовану гру з дзвіночками. Я хочу це змінити, і у мене є ідея для мого наступного проекту.

Ідея полягає в тому, що ти амеба. У амеб є такі вушкоподібні ядра (або щось подібне, я не знаю біології), і у вас їх два. Ви керуєте одним, WASDа другим за допомогою IJKL. Там повинно бути радіус постійна матеріалу навколо кожного з ядер:

2meba1

А область амеб повинна залишатися постійною. Отже, якщо рухати ядро ​​в одну сторону, ви збільшуєте площу амеби, але це збільшення компенсується зменшенням десь в іншому місці:

2meba2

Ааааа, і я хотів би застосувати механіку вагінації . Ви поглинаєте речі, поглинаючи їх, як начальник. Можливо, навіть зайве ядро ​​або голка, яка вискакує, і змушує усі ваші внутрішні речі починати лущити :

2meba3

Але ось проблема: я не знаю, як це зробити. Однак мені хотілося б декілька ідей щодо її реалізації. Чи слід досліджувати бібліотеки фізики, як Box2D? А може, щось, що стосується фізики рідини? Будь-яка допомога буде дуже вдячна.

PS Не соромтеся вкрасти цю ідею. У мене є маса ідей. Якщо ви це зробите, будь ласка, скажіть мені, як ви це зробили, щоб я сам спробував.


3
Іменникові та дієслівні форми - інвагінація та інвагінація відповідно, FYI. (Я займався біологією.) Гарні фото.
Інженер

2
де ти взяв ту солодку чорну папір?
брендан

5
@brendan: Якщо ви поміняєте чорний на білий, червоний на синій і білий на чорний, стає набагато очевидніше, де він дістав цю "чорну папір". ;)
лицар666

1
Ви, занадто розумні, хлопці: D
Джейсон Ту

Відповіді:


16

У верхній частині моєї голови застереження, яке дотримується мене, - це те, що ви хочете, щоб зона була постійною. Це вражає мене як біль у всьому цьому, тому давайте спробуємо запропонувати просте рішення для цього.

Візьміть шматочок струни і зв’яжіть кінці разом, щоб зробити коло. Можливо, я помиляюся, але моя інтуїція говорить про те, що внутрішня частина цього рядка має постійну площу або може діяти дуже жахливо, як ваша межа амеби.

Тому я б сказав: реалізуйте рядок. ;) Більшість бібліотек фізики можуть робити пружини (у Box2D це виглядає як з'єднання відстані), і найпростіший спосіб зробити рядок - це з'єднати багато рядків разом. Приєднуйтесь до останнього до першого, щоб створити цикл. Переконайтесь, що пружини в струні мають достатньо високу постійну пружину, щоб не розтягуватися - ви хочете, щоб вони були досить жорсткими і рухалися в унісон, а не розширювалися.

Далі створіть сили для дії на струні. Тривіально ваші два ядра / очі / контрольні точки створюють сили на точки, що складають рядок. Зробіть падіння сили за допомогою функції зворотного квадрата:

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

І направляйте напрямок сили безпосередньо від керуючого ока / кулі, як відштовхуюча сила, що виходить від кулі. Налаштуйте K, щоб контролювати силу сили. Переконайтесь, що K не надто високий - ви не хочете, щоб його просто виштовхували силою, просто тримайте його подалі від кульок. Залиште велику кількість млявості у вашій нитці.

Щойно з цими двома ви, ймовірно, отримаєте цілком рівномірну форму, тому я б також запропонував вам створити трохи слабкіші сили навколишнього «супу», щоб змінити форму амеби. Ви можете робити ці випадкові місця, регулярно змінювати їх силу (ви можете зробити це синусоїдною функцією для приємних рухів) і змусити їх працювати так само, як кульки.

Вагінація (fnarr): це найскладніший. Ви змушуєте його обволікати об'єкт, перевіряючи, чи вдалося дві сусідні точки на рядку наблизитись, і якщо так, вам потрібно:

Виміряйте відстань між точками на рядку. Порахуйте кількість пружинних секцій. Знайдіть «коротший» шлях від А до В.

Розрийте рядок і знову з'єднайте його з двома сусідніми точками. Іншими словами, безпосередньо з'єднайте точку А до точки В і відкиньте всі речі між ними.

Повторно вставте пропущене число очок (плюс будь-які бонусні бали, якщо ви хочете збільшити розмір, поївши щось) в рядок з іншого боку - тобто сторону від B до A. Якщо ви вставите їх однаково по довжині і зробіть їх коротшими, ніж бажана відстань між точками, ви повинні отримати приємний пружинисто-розширений ефект.

Я думаю, що це охоплює все. До речі: ідея звучить приголомшливо.


18
FWIW, хоча мені в цілому подобається це рішення, ваша інтуїція щодо внутрішньої частини струни, що має постійну площу , неправильна - коло має максимальну площу поза будь-якою формою, а ця пов'язана струна як її межа. Найпростіший спосіб побачити, що вона змінюється, - це уявити собі «присідання» струни, підтягуючи два кінчики; тоді форма, яку ви отримаєте (прямокутник чи еліпс, чи що у вас є), ніколи не може бути ширшою за половину периметра, але її висота зменшується до нуля, тому площа (яка обмежена шириною * висота) також скорочується до нуля.
Стівен Стадницький

1
Я думаю, ти мав на увазі "... зробити струну - це з'єднати багато пружин разом".
Річард Марскелл - Дракір

8

Для того, щоб ви змоделювали ендоцитоз (процес, що клітина поїдає зовнішні ядра), кожне ядро, як усередині амеби, так і зовні, відбивало б межу амеби. Сердечники всередині амеби будуть мати помірно сильний відштовхуючий ефект, тоді як ті, що знаходяться зовні, матимуть невеликий відштовхуючий ефект. Це проілюстровано нижче.

введіть тут опис зображення

Коли зовнішнє ядро ​​(червоне) наближається до амеби, його відштовхувальне поле створить круговий відступ в амбі. Врешті-решт, дві сторони (виділені зеленим кольором) будуть торкатися один одного. При виявленні подібного зіткнення круговий відступ стирається, і все, що знаходиться всередині нього, витрачається.

Це досить добре імітує процес ендоцитозу і дає приємний візуальний ефект.

Що стосується моделювання межі амеби, мені подобається ідея Метта Кемпа про використання дуже великої кількості пов'язаних пружин. Це підтримує не постійну площу, а постійний периметр. У реальному житті вода може вільно стікати в мембрану клітин і з неї (межа амеби), тому клітини не мають постійного об’єму.


Деякі інші ідеї, щоб зробити гру реалістичною, змогли б якось змінити вміст солі в клітинах. Коли концентрація солі всередині і зовні клітини не збігається, вода пробігає через клітинну мембрану до місця з більш високим вмістом солі в процесі, який називається осмосом. Якщо амеба має високий вміст солі, вона мала б більший об’єм, але периметр не змінювався б. У грі це можна змоделювати, надаючи внутрішнім сердечникам більший відштовхуючий ефект, якщо вміст солі вище.

Оскільки більш високий вміст солі надасть сердечникам більш високий відштовхуючий ефект, це має перевагу в тому, щоб полегшити контроль амеби. Маючи менший вміст солі, амеба злегка згинається та згинається під впливом навколишнього середовища. Це має перевагу в тому, що можна їсти інші сердечники легше, оскільки амеба зможе оточити її легше.


3

Ну щоб зробити графічний ефект, ви, швидше за все, використовуватимете метаболи (для них багато навчальних посібників в Інтернеті)


2

Я добре знаю навчальну гру під назвою CellCraft (хоч ніякого відношення до Minecraft не має), яка передбачає управління істотою, подібною до клітин, яка має дуже схожі рухи на те, що вам потрібно. Гра безкоштовна і, мабуть, важливіше те, що вони на своєму сайті чітко заявили, що мають намір безкоштовно зробити вихідний код, і це було зроблено в ActionScript 3 і це флеш-гра.

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


1

Я б пішов з цього приводу - це імітувати струнний цикл, подібний до того, як запропонував Метт Кемп, але наповнити інтер'єр частинками, які відштовхують один одного та рядок. таким чином ви забезпечите приблизну економію об’єму. Вам доведеться подбати про те, щоб великі сили не вибивали частинки назовні.

Подивіться на "гідродинаміку згладжених частинок" для моделювання частинок та "інтеграцію верлетів" для їх моделювання (та струни). Verlet - це позиційна техніка, тому вона дуже проста і стабільна.

Для забезпечення ефективності я запропонував би систему "рівномірного просторового розподілу сітки". Знову ж таки, простий у здійсненні та потужний прискорення.

Ви також можете використовувати metaballs для візуалізації об'єкта замість рядка. Але тоді у вас виникає проблема, що частинки можуть розділитися на окремі грудки. Подивіться на "сили Ван-дер-Ваальса" для залучення / відштовхування, що веде до скупчення.

Іншим підходом було б надання невеликої «надутої» сили струнним частинкам у напрямку їх «зовнішніх» норм. Це імітуватиме своєрідний внутрішній тиск. В результаті виходить, що петля намагатиметься підтримувати форму кола. Ось що я і використовував для цього .

Сподіваюся, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.