gpt4 book ai didi

ios - 在 SpriteKit 中使用加速度计移动和旋转 Sprite

转载 作者:可可西里 更新时间:2023-11-01 05:44:31 24 4
gpt4 key购买 nike

我正在尝试使用 Spritekit 制作我的第一款游戏,所以我有一个 Sprite 需要使用我的加速度计四处移动。好吧,这样做没问题;运动非常流畅且 react 灵敏,问题是当我尝试旋转我的 Sprite 以使其面对自己的运动时,我经常让它“颤抖”,就像他患有帕金森病一样。 (:D)

我确实意识到,当加速度计数据在 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 时问题并没有消失。

我想保持方向响应,但我也想修复 Sprite 旋转的这种“抖动”。

很抱歉我的英语不好,在此先感谢您的任何建议。

最佳答案

您可以尝试使用低通滤波器(用于隔离重力影响)或高通滤波器(用于隔离用户加速度的影响)。

    #define filteringFactor 0.1

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {

//low pass
accelerX = (acceleration.x * filteringFactor) + (accelerX * (1.0 - filteringFactor));
//idem … accelerY
//idem … accelerZ

//or high pass
accelerX = acceleration.x - ( (acceleration.x * filteringFactor) + (accelerX * (1.0 - filteringFactor)) );
//idem … accelerY
//idem … accelerZ
}

关于ios - 在 SpriteKit 中使用加速度计移动和旋转 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22281453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com