我正在尝试使用加速计旋转精灵。 当我向右倾斜时,我希望它稍微向右旋转,当我向左倾斜时,我希望它稍微向左旋转...感谢您的帮助,Reed。
UIAccelerationValue accelerationX;
UIAccelerationValue accelerationY;
float currentRawReading;
float calibrationOffset;
@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;
-(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
}
你需要根据所针对的视图或对象稍微调整一下 -- 但基本上就是这样。
希望这可以帮到你,
迈克尔
这并不应该太难。只需在代码中有一个处理 UIAccelerometerDelegate
类的地方,并根据通过 -accelerometer:didAccelerate:
回调函数接收到的参数值对您的精灵进行更改。
有关委托类的 Apple 文档可在以下位置找到...
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的值发生变化时,精灵将旋转到所需的角度。
享受吧.. :)