因此,我有这个应用程序我正在通过倾斜设备(加速度计)在屏幕上滚动球的位置。我如何更改下面的代码,以便我不必将手机保持平坦,并将其作为我的中立平衡点。我想要的是,无论你在应用程序加载时与设备有什么倾斜,这都将是神经平衡点。从目前的角度来看,你拿着中立点的装置。中立平衡点意味着球仍然非常稳定。希望这清楚我想要什么。此外,该应用程序仅适用于landscapeRight。将当前设备位置识别为平坦
注下面的代码工作百分之百的好,就像它需要它来为我的app.Just我需要拿着手机平板打滚球工作...
CGRect screenRect;
CGFloat screenHeight;
CGFloat screenWidth;
double currentMaxAccelX;
double currentMaxAccelY;
@property (strong, nonatomic) CMMotionManager *motionManager;
-(id)initWithSize:(CGSize)size {
//init several sizes used in all scene
screenRect = [[UIScreen mainScreen] bounds];
screenHeight = screenRect.size.height;
screenWidth = screenRect.size.width;
if (self = [super initWithSize:size]) {
self.motionManager = [[CMMotionManager alloc] init];
self.motionManager.accelerometerUpdateInterval = .2;
[self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue]
withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
[self outputAccelertionData:accelerometerData.acceleration];
if(error)
{
NSLog(@"%@", error);
}
}];
}
return self;
}
-(void)outputAccelertionData:(CMAcceleration)acceleration{
currentMaxAccelX = 0;
currentMaxAccelY = 0;
if(fabs(acceleration.x) > fabs(currentMaxAccelX))
{
currentMaxAccelY = acceleration.x;
}
if(fabs(acceleration.y) > fabs(currentMaxAccelY))
{
currentMaxAccelX = acceleration.y;
}
}
-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
//set min and max bounderies
float maxY = screenHeight - (self.ball.size.width/2);
float minY = 0 + (self.ball.size.width/2);
float maxX = screenWidth - (self.ball.size.height/2);
float minX = 0 + (self.ball.size.height/2);
float newY = 0;
float newX = 0;
//left and right tilt
if(currentMaxAccelX > 0.05){
newX = currentMaxAccelX * -10;
}
else if(currentMaxAccelX < -0.05){
newX = currentMaxAccelX*-10;
}
else{
newX = currentMaxAccelX*-10;
}
//up and down tilt
newY = currentMaxAccelY *10;
newX = MIN(MAX(newX+self.ball.position.x,minY),maxY);
newY = MIN(MAX(newY+self.ball.position.y,minX),maxX);
self.ball.position = CGPointMake(newX, newY);
}
如果我理解正确:在applaunch中,注册x/y值,这是您的新“零”。然后使用这个新的零作为偏移量来完成你想要做的事情。 – Larme
@Larme这应该是一个答案,因为它是做到这一点的正确方法 – Krumelur
是的,但我喜欢代码中的答案,与代码中的事情是如何完成的。很难找到在我的搜索中如何使用偏移的任何代码示例。 – 4GetFullOf