因此,我有這個應用程序我正在通過傾斜設備(加速度計)在屏幕上滾動球的位置。我如何更改下面的代碼,以便我不必將手機保持平坦,並將其作爲我的中立平衡點。我想要的是,無論你在應用程序加載時與設備有什麼傾斜,這都將是神經平衡點。從目前的角度來看,你拿着中立點的裝置。中立平衡點意味着球仍然非常穩定。希望這清楚我想要什麼。此外,該應用程序僅適用於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