2014-09-02 4 views
1

Я действительно надеюсь, что кто-то поймет, какой эффект я прошу. Вы когда-нибудь играли в игры, где персонаж скользит в одну сторону, и когда вы пытаетесь изменить направление символов, это не так быстро, поскольку им нужно замедлить в начальном направлении, прежде чем они смогут начать скольжение в другую сторону? Новая игра в App Store «Swing Copters» создателя Flappy Bird - именно тот эффект, о котором я говорю. Может кто-то, пожалуйста, помогите мне создать этот эффект в SpriteKit. Я уже пытался достичь этого, применяя разные силы, но я либо не делаю это правильно, либо эффект невозможен силами.Имитация эффекта «Изменение направления на льду»

Заранее благодарен!

+2

Это называется «инерция». – ceejayoz

+0

@ceejayoz Как мне подражать этому в наборе спрайтов ... используя физику? –

+2

Если узел идет в одну сторону, и вы продолжаете применять импульс в противоположном направлении, узел будет замедляться и в конечном итоге ускоряться снова. Какой импульс вы применяете, определяет, как быстро замедляется и ускоряется эффект, используйте низкий импульс для льда и тот, который в пару раз больше для других поверхностей. – LearnCocos2D

ответ

0

Возможно, вы хотите попробовать работать с некоторыми материалами ускорения.

Давайте подумаем о гравитации на земле (a = 9,81 м/с²). Если вы бросаете мяч прямо в небо, Ball начинает со скорости: скажем 5 метров в секунду (положительная скорость). Спустя короткое время сила тяжести тянет скорость мяча до 0, поэтому мяч не может подняться выше. Сразу после этого гравитация тянет мяч вниз, пока он не ударится о землю. (Отрицательная скорость)

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

Если мяч должен двигаться вправо, положительное ускорение, , если мяч должен двигаться влево, отрицательное ускорение.

В формуле вы можете использовать что-то вроде

v = (int) (a * t + v0); 
v0 = v; 

V является следующей скоростью, а является ускорением вы хотите использовать, т является отработанным временем и v0 является текущей скоростью. t следует считать нано-время с момента последнего изменения направления. (int) отличает целое к целому числу, поэтому вы можете использовать это непосредственно для перемещения шара/графики на экране.

Повторите это каждый кадр.

Для изменения направления вы можете использовать

t = 0; 
a = a * (-1); 

т должен быть 0 раз, в противном случае он получает багги. Надеюсь, это было полезно.