我正在使用Spritekit制作我的第一个游戏,我需要使用加速计来移动精灵。好吧,没有问题;移动非常平滑和响应,但问题是当我尝试旋转精灵以使其面对自己的移动时,它经常像帕金森症一样“颤抖”(:D)。
我意识到这发生在加速度计数据在x,y轴上太接近0时。
所以问题是:有没有办法修复我的“帕金森病”?:D
下面是一些代码:
我尝试在updatedAccelX或updatedAccelY的绝对值大于某些值时,仅启动_velocity向量的更新,但结果是当值在0.1和0.2之间并且改变方向时,移动不流畅,即使值小于0.1问题也没有消失。 我希望保持方向的响应性,但也想修复精灵旋转的“抖动”问题。非常抱歉我的英语不好,谢谢您提前任何建议。
我意识到这发生在加速度计数据在x,y轴上太接近0时。
所以问题是:有没有办法修复我的“帕金森病”?:D
下面是一些代码:
-(void) update:(NSTimeInterval)currentTime{
static CGPoint oldVelocity;
//static CGFloat oldAngle;
if(_lastUpdatedTime) {
_dt = currentTime - _lastUpdatedTime;
} else {
_dt = 0;
}
_lastUpdatedTime = currentTime;
CGFloat updatedAccelX = self.motionManager.accelerometerData.acceleration.y;
CGFloat updatedAccelY = -self.motionManager.accelerometerData.acceleration.x+sinf(M_PI/4.0);
CGFloat angle = vectorAngle(CGPointMake(updatedAccelX, updatedAccelY));
_velocity = cartesianFromPolarCoordinate(MAX_MOVE_PER_SEC, angle);
if(oldVelocity.x != _velocity.x || oldVelocity.y != _velocity.y){
_sprite.physicsBody.velocity = CGVectorMake(0, 0);
[_sprite.physicsBody applyImpulse:CGVectorMake(_velocity.x*_sprite.physicsBody.mass, _velocity.y*_sprite.physicsBody.mass)];
_sprite.zRotation = vectorAngle(_velocity);
oldVelocity = _velocity;
}
}
static inline CGFloat vectorAngle(CGPoint v){
return atan2f(v.y, v.x);
}
我尝试在updatedAccelX或updatedAccelY的绝对值大于某些值时,仅启动_velocity向量的更新,但结果是当值在0.1和0.2之间并且改变方向时,移动不流畅,即使值小于0.1问题也没有消失。 我希望保持方向的响应性,但也想修复精灵旋转的“抖动”问题。非常抱歉我的英语不好,谢谢您提前任何建议。