2012-03-30 6 views
1

Я недавно экспериментировал и пытался воссоздать эффект подражания в iOS UI в моей игре, так что, если вы прокрутите границы уровня, камера медленно отскакивает назад граница.2d Физика игры Простота ввода/вывода на основе скорости

В настоящее время я реализовал некоторые из двух расчетов Роберта Пеннера, перенесенных с ActionScript, однако я не уверен, что это правильный подход из-за того, что он не учитывает скорость нашей камеры. На данный момент это выглядит примерно так:

easeInOut(currentTime, startValue, endValue, duration);

Фактические реализации доступны здесь: http://www.jesusgollonet.com/blog/2007/09/24/penner-easing-cpp/

Я пришел к выводу, что это своего рода серой области, как у меня нет был в состоянии найти много информации об этом, либо это, либо я не знаком с правильным именем для такого расчета, которое я пытаюсь описать. Если у кого-нибудь есть рекомендации по использованию скорости при вычислении входов/выходов в 2-й игре или в пользовательском интерфейсе, мне было бы очень интересно ее услышать!

+0

Этот вопрос может быть более подходящим для [gamedev.stackexchange.com] (http://gamedev.stackexchange.com/) –

+0

Это было задано несколько раз раньше. Один простой способ - использовать [сигмовидную кривую] (http://en.wikipedia.org/wiki/Sigmoid_function). Другим способом было бы иметь вектор ускорения в направлении движения, который переключает направление, когда объект/камера находится на полпути к его окончательному положению. –

ответ

2

Вы можете использовать пружину critically damped между краем и камерой. Сила будет F = -w * w * x - 2 * w * v, где w - естественная частота пружины (попробуйте несколько разных значений, пока не получите что-то, что вам нравится) x - смещение от границы, а v - текущий скорость.

+0

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

2

Cocos2d (и -x) имеют CCEaseIn и CCEaseOut, among many others.

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

+0

Движение камеры не реализовано с использованием системы действий cocos2d, я сомневаюсь, что это было бы жизнеспособным решением. – Aequitas