使用加速计旋转Cocos2d iPhone中的精灵

3
我正在尝试使用加速计旋转精灵。 当我向右倾斜时,我希望它稍微向右旋转,当我向左倾斜时,我希望它稍微向左旋转...感谢您的帮助,Reed。
3个回答

9
首先,在您的头文件中,您需要声明以下变量:
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;  

请在您的.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
}

你需要根据所针对的视图或对象稍微调整一下 -- 但基本上就是这样。

希望这可以帮到你,

迈克尔


请注意,这适用于普通的iOS应用程序。对于cocos2d,所有的CCLayer对象已经符合UIAccelerometerDelegate,你只需要设置node.isAccelerometerEnabled = YES,然后像往常一样创建一个accelerometer:DidAccelerate:方法即可。请参考http://www.cocos2d-iphone.org/wiki/doku.php/tips%3ausing_accelerometer_for_sprite_movement。但是,您可能仍然需要过滤加速度计读数,就像Michael O'Brien所展示的那样。有关更多信息,请参阅http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MotionEvents/MotionEvents.html。 - aiham

1

0
在加速度计的委托函数中,只需编写代码-->>
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的值发生变化时,精灵将旋转到所需的角度。

享受吧.. :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接