#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, который должен навести вас на некоторые идеи.