Как я могу использовать акселерометр для перемещения моего ccpsprite / image влево и вправо? (как в каракули прыжок) - PullRequest
0 голосов
/ 15 января 2011

Я пытался использовать код из http://github.com/haqu/tweejump, но он не плавный ... он телепортируется в 10-20 пикселей :(.

Есть ли лучший способ?

Какой-то код был бы великолепен.

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

:)

PS: я использую cocos2d.

1 Ответ

1 голос
/ 16 января 2011

Рассчитайте желаемую скорость вашего спрайта как функцию измерения акселерометра.

Самый простой способ - использовать линейную зависимость: spriteVel = cft*accValue, где cft - это некоторый коэффициент, показывающий, как быстро ваш спрайт будет двигаться

Другой способ - сказать, что ускорение вашего спрайта является линейной функцией измерения акселерометра: spriteAcc = cft*accValue и вычислять скорость как линейную функцию ускорения: spriteVel = spriteInitVel + time*accValue

Это может быть легкореализована в вашей tick функции, которая называется каждым кадром в игре следующим образом: `spriteVel + = timeSinceLastCall * accValue '

Также в этой функции обновите позицию спрайта следующим образом: spritePos = timeSinceLastCall*spriteVel

Это даст плавное и реалистичное (при использовании второго подхода) движение спрайта

Чтобы включить акселерометр, добавьте этот код в метод инициализации слоя

isAccelerometerEnabled = YES;
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:(TIMER_INTERVAL)];

, где TIMER_INTERVAL - этотребуемый для вас интервал (например, 1./30)

реализовать эту функцию в вашем слоеve акселерометр измеряет

- (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:    (UIAcceleration*)acceleration{

}

Также возможно обновить ускорение / скорость / положение спрайта в этой функции

РЕДАКТИРОВАТЬ:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAcceleration_Class/Reference/UIAcceleration.html

- (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:    (UIAcceleration*)acceleration{

}

просто взять вектор ускорения из переменной ускорения

, например, x:

float accX = [acceleration x];
...