cocos2d / box2d iPhone — Случайные циклические пути

#iphone #ios #cocos2d-iphone #box2d

#iPhone #iOS #cocos2d-iphone #box2d

Вопрос:

Я экспериментирую с некоторыми новыми идеями в Cocos2D / Box2D на iPhone.

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

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

У кого-нибудь есть для меня какие-нибудь яркие идеи?

Большое спасибо.

Ответ №1:

Вам нужно, чтобы светлячки сталкивались друг с другом?

Я спрашиваю, как будто это не является обязательным требованием, Box2D, вероятно, излишен для ваших нужд. Cocos2d, судя по всему, отличный выбор для этого, но я думаю, вам было бы лучше изучить алгоритмы флокирования, такие как boids

Даже это может быть чрезмерно сложным. Вероятно, будет достаточно смешать несколько терминов sin и cosine с некоторыми случайными коэффициентами масштабирования.

У вас может быть одна комбинация sin / cosine, образующая эллипс размером почти с экран:

 x = halfScreenWidth   cos (t) * halfScreenWidth * randomFactor;
y = halfScreenHeight   sin (t) * halfScreenHeight * randomFactor;
  

где randomFactor будет чем-то в диапазоне от 0,6 до 0,9

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

При умножении вашей временной дельты (t) на разные значения (отрицательное и положительное) траектория кривой будет изменяться менее геометрическим образом. Например, если вы используете

 x = halfScreenWidth   cos (2*t) * halfScreenWidth * randomFactor;
  

эллипс превратится в цифру 8. (я думаю!)

Надеюсь, это поможет вам начать. Удачи.

Ответ №2:

Одним из мест, где можно было бы искать идеи, была бы область искусственной жизни. Они долгое время имитировали скопления объектов. Вот ссылка на некоторый простой swarm-код, написанный на Java, который должен навести вас на некоторые идеи.

http://www.aridolan.com/ofiles/Download.aspx