Cocos2d iPhone:使用Accelerometer旋转Sprite

Ree*_*eed 3 iphone rotation accelerometer cocos2d-iphone

我正在尝试使用加速度计旋转精灵.当我向右倾斜时,我希望他稍微向右旋转,当我向左倾斜时,我希望他稍微向左旋转......

提前谢谢,里德

Mic*_*ien 9

冷杉 - 在您的h文件中,您需要生成以下变量:

UIAccelerationValue accelerationX;
UIAccelerationValue accelerationY;
float currentRawReading;
float calibrationOffset;
Run Code Online (Sandbox Code Playgroud)

还要确保您的h文件具有:

@interface myViewName : UIViewController <UIAccelerometerDelegate>
Run Code Online (Sandbox Code Playgroud)

然后在您的.m文件中,在顶部放置的导入下方:

#define kFilteringFactor 0.05
CGFloat DegreesToRadians(CGFloat degrees) {return degrees * M_PI / 180;};
CGFloat RadiansToDegrees(CGFloat radians) {return radians * 180/M_PI;};
Run Code Online (Sandbox Code Playgroud)

然后在viewDidLoad函数的.m文件中放入:

UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = 1.0f/60.0f;  
Run Code Online (Sandbox Code Playgroud)

还要将以下函数添加到.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
}
Run Code Online (Sandbox Code Playgroud)

你必须根据你所针对的视图或对象稍微调整它 - 但这就是它.

希望这可以帮助,

迈克尔