Cocos2d iPhone: вращать спрайт с помощью акселерометра - PullRequest
3 голосов
/ 30 сентября 2010

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

Заранее спасибо, Рид

Ответы [ 3 ]

9 голосов
/ 05 октября 2010

Отключается - в вашем h-файле вам нужно ввести следующие переменные:

UIAccelerationValue accelerationX;
UIAccelerationValue accelerationY;
float currentRawReading;
float calibrationOffset;

Также убедитесь, что ваш файл h имеет:

@interface myViewName : UIViewController <UIAccelerometerDelegate>

Затем в вашем файле .m, расположенном чуть ниже импорта в верхней части, введите:

#define kFilteringFactor 0.05
CGFloat DegreesToRadians(CGFloat degrees) {return degrees * M_PI / 180;};
CGFloat RadiansToDegrees(CGFloat radians) {return radians * 180/M_PI;};

Тогда в вашем .m файле на вашей функции viewDidLoad поместите:

UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = 1.0f/60.0f;  

также добавьте следующую функцию в ваш файл .m:

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

accelerationX = acceleration.x * kFilteringFactor + accelerationX * (1.0 - kFilteringFactor);
accelerationY = acceleration.y * kFilteringFactor + accelerationY * (1.0 - kFilteringFactor);

// keep the raw reading, to use during calibrations
currentRawReading = atan2(accelerationY, accelerationX);

float rotation = -RadiansToDegrees(currentRawReading);

targetView.transform = CGAffineTransformMakeRotation(-(DegreesToRadians(rotation)));
//targetView.transform = CGAffineTransformRotate(targetView.transform, -(rotation * 3)); //if you want easing
}

вам придется немного подправить его в зависимости от того, на какой вид или объект вы нацеливаетесь - но на этом все.

Надеюсь, это поможет,

Michael

1 голос
/ 04 октября 2010

Не должно быть слишком сложно.Просто найдите где-нибудь в своем коде, который обрабатывает класс UIAccelerometerDelegate, и примените изменения к своим спрайтам на основе значений, полученных через параметры для обратного вызова – accelerometer:didAccelerate:.

Документы Apple для класса делегата доступны по адресу...

https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIAccelerometerDelegate_Protocol/UIAccelerometerDelegate/UIAccelerometerDelegate.html

0 голосов
/ 13 июня 2012

В функции делегата акселерометра просто напишите код - >>

float angleRadians = atanf((float)X_Position / (float)Y_Position);
float angleDegrees = CC_RADIANS_TO_DEGREES(angleRadians);
float cocosAngle = 1 * angleDegrees;
sprite.rotation = cocosAngle;

и спрайт будет повернут на нужный угол с изменениями значений X_position, Y_Position и angle.

Наслаждайся ..:)

...