У меня есть игровая механика «амеба». Есть идеи, как это реализовать?


19

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

Идея в том, что ты амеба. У амеб есть эти глазоподобные ядра (или что-то в этом роде, я не знаю биологию), а у вас их два. Вы управляете одним, WASDа другим - IJKL. Там должно быть радиус постоянная материала вокруг каждого из ядер:

2meba1

А площадь амебы должна оставаться постоянной. Поэтому, если вы перемещаете ядро ​​в одном направлении, вы увеличиваете площадь амебы, но это увеличение компенсируется уменьшением где-то еще:

2meba2

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

2meba3

Но вот проблема: я не знаю, как это сделать. Однако мне бы хотелось несколько идей о том, как это реализовать. Должен ли я изучать физические библиотеки, такие как Box2D? Или может быть что-то, связанное с физикой жидкости? Любая помощь приветствуется.

PS Не стесняйтесь воровать эту идею. У меня много идей. Если да, расскажи мне, как ты это сделал, чтобы я сам попробовал.


3
Существительные и формы глагола являются инвагинацией и инвагинацией, соответственно, к вашему сведению. (Я занимался биологией.) Красивые фотографии.
инженер

2
где ты взял эту сладкую черную бумагу?
Брендан

5
@brendan: Если вы поменяете местами черный с белым, красный с синим и белый с черным, становится намного более очевидным, откуда он взял эту «черную бумагу». ;)
knight666

1
Вы, ребята, слишком умны: D
Джейсон Ту

Ответы:


16

Вдобавок ко мне, предложение, которое бросается в глаза, это то, что вы хотите, чтобы площадь была постоянной. Это кажется мне болью во всем этом, поэтому давайте попробуем найти простое решение.

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

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

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

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

И сделайте направление силы прямо от контрольного глаза / шара, как отталкивающая сила, исходящая от шара. Твик К, чтобы контролировать силу силы. Удостоверьтесь, что K не слишком высоко - вы не хотите, чтобы сила просто толкнула его, просто держите его подальше от шаров. Оставьте много провисания в вашей строке.

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

Вагинация (фнарр): это сложный вопрос. Вы заставляете его обернуть объект, проверяя, удалось ли двум несмежным точкам в строке подойти достаточно близко, и если да, то вам нужно:

Измерьте расстояние между точками на строке. Подсчитайте количество весенних секций. Найдите «более короткий» путь от А до Б.

Разбейте строку и снова соедините ее с двумя соседними точками. Другими словами, непосредственно соедините точку A с точкой B и отбросьте все промежуточное содержимое.

Вставьте недостающее количество баллов (плюс любые бонусные баллы, если вы хотите увеличить размер, съев что-то) в строку на другой стороне - то есть стороне от B до A. Если вы вставите их одинаково по длине и сделав их короче, чем желаемое расстояние между точками, вы получите приятный эффект пружинящего расширения.

Я думаю, что это охватывает все. Кстати: идея звучит потрясающе.


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

1
Я думаю, что вы имели в виду «... чтобы создать цепочку, нужно соединить множество пружин ».
Ричард Марскелл - Дракир

8

Для того, чтобы вы могли симулировать эндоцитоз (процесс, в котором клетка питается внешними ядрами), каждое ядро, как внутри, так и снаружи амебы, будет отталкивать границу амебы. Ядра внутри амебы будут иметь умеренно сильный отталкивающий эффект, тогда как ядра снаружи будут иметь небольшой отталкивающий эффект. Это показано ниже.

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

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

Это очень хорошо имитирует процесс эндоцитоза и дает хороший визуальный эффект.

Что касается моделирования границы амебы, мне нравится идея Мэтта Кемпа об использовании очень большого числа связанных пружин. Это не поддерживает постоянную площадь, но постоянный периметр. В реальной жизни вода может свободно течь внутрь и наружу клеточной мембраны (граница амебы), поэтому клетки не имеют постоянного объема.


Некоторые другие идеи, чтобы сделать игру реалистичной, могли бы каким-то образом изменить содержание соли в клетках. Когда концентрация соли внутри и снаружи клетки не совпадает, вода устремляется через клеточную мембрану к месту с более высоким содержанием соли в процессе, называемом осмосом. Если амеба имеет высокое содержание соли, она будет иметь больший объем, но периметр не изменится. В игре это можно смоделировать, придав внутренним ядрам более высокий отталкивающий эффект, если содержание соли выше.

Поскольку более высокое содержание соли даст ядрам более высокий отталкивающий эффект, оно имеет преимущество, заключающееся в том, что амебу легче контролировать. При более низком содержании соли амеба может сгибаться и легче гнуться под воздействием окружающей среды. Преимущество этого состоит в том, что можно легче есть другие ядра, поскольку амеба могла бы легче ее окружить.


3

Для создания графического эффекта вы, скорее всего, будете использовать метаболлы (для них есть множество онлайн-уроков)


2

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

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


1

Я хотел бы смоделировать струнную петлю, аналогичную предложенной Мэттом Кемпом, но заполнить внутреннее пространство частицами, которые отталкивают друг друга и струну. таким образом вы обеспечите приблизительное сохранение объема. Вы должны позаботиться о том, чтобы большие силы не выбивали частицы наружу.

Ищите «гидродинамику сглаженных частиц» для моделирования частиц и «интеграцию верлетов» для их моделирования (и струны). Verlet - это метод позиционирования, поэтому он очень прост и стабилен.

Чтобы сохранить эффективность, я бы предложил систему «равномерного пространственного разбиения сетки». Опять же, прост в реализации и дает отличные ускорения.

Вы также можете использовать метаболлы для визуализации объекта вместо использования строки. Но тогда у вас есть проблема, что частицы могут разделиться на отдельные скопления. Ищите «силы Ван-дер-Ваальса» для баланса притяжения / отталкивания, приводящего к комкованию.

Другой подход заключается в том, чтобы обеспечить небольшую «раздувную» силу для частиц струны в направлении их «наружных» нормалей. Это будет имитировать своего рода внутреннее давление. В результате цикл будет пытаться сохранить форму круга. Вот что я использовал для этого .

Надеюсь, это поможет.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.