为什么我的精灵在触摸另一个物理身体时会发抖?

时间:2014-11-11 20:30:03

标签: ios objective-c sprite-kit physics

我有一个精灵,这个位置由加速度计操纵,如下所示:

-(float)movement {
  self.accelerometerData = self.motionManager.accelerometerData;
  float xAccelerationPosition = 0;
  if ((self.accelerometerData.acceleration.x)<-0.1) {
    xAccelerationPosition = 30 * self.accelerometerData.acceleration.x;
  }
   if ((self.accelerometerData.acceleration.x)>0.1) {
    xAccelerationPosition = 30 * self.accelerometerData.acceleration.x;
  }


  return xAccelerationPosition;
}
-(void)update:(NSTimeInterval)currentTime {

  if ((self.player.position.x + [self.playerData movement]) < self.frame.size.width &&
      (self.player.position.x + [self.playerData movement]) > 0){

      [self.player setPosition:CGPointMake((self.player.position.x + [self.playerData movement]), self.player.position.y)];

  }

}

方法属于不同的类。

我在播放器和场景中也有一个物理体,但是每当xAccelerationPosition太高时,精灵就会在屏幕两侧开始抖动。为什么呢?

1 个答案:

答案 0 :(得分:0)

使用加速度计数据输入玩家身体的速度(或施加冲动),而不是直接更新玩家的位置,因为这将绕过物理碰撞处理,让它解决与下一帧中其他物体的任何穿透。