我正在编写一个自上而下的汽车游戏,通过在didSimulatePhysics方法中设置速度来移动汽车。要设置速度,请使用使用以下公式创建的参数:
CGVectorMake(JoyPadRelativePosition.x * maxSpeed,-JoyPadRelativePosition.y * maxSpeed);
JoypadRelativePosition保持用户决定的加速量,并且maxSpeed保持最大速度的恒定值。通过这种方式,我可以以正确的方向和正确的速度移动我的汽车。然而有时车或者背景可能是“抖动”,这是我的didSimulatePhysics:
- (void)didSimulatePhysics
{
//moving the car
float dx=JoyPadRelativePosition.x*_maxSpeed;
float dy=JoyPadRelativePosition.y*_maxSpeed;
[self.car.physicsBody setVelocity: CGVectorMake(dx,-dy)];
//center the background to car position
CGPoint target = [self pointToCenterViewOn:self.car.position];
CGPoint newPosition = _worldNode.position;
newPosition.x += (target.x - _worldNode.position.x) * 0.1f;
newPosition.y += (target.y - _worldNode.position.y) * 0.1f;
_worldNode.position = newPosition;
}
我认为我必须考虑每个帧的不同渲染时间来移动汽车和背景,所以在我的更新方法中我实现了这个:
if (_lastUpdateTime) {
_dt = currentTime - _lastUpdateTime;
} else {
_dt = 0;
}
_lastUpdateTime = currentTime;
通过这种方式,我知道从最后一个渲染帧传递了多少毫秒,但现在考虑到变量操纵杆值,最大速度和从最后一帧传递的毫秒数,如何设置我的汽车速度?我认为这种计算可以消除抖动问题,但如果还有其他解决方案,我会接受它,无论如何,如果删除抖动...我想通过SetVelocity移动汽车,无论如何我试图通过setPosition移动它和问题仍然存在。
EDIT 我发现了一些fps掉落......我正试图找到原因。我试图将帧速率阻止到更低的值,现在它更好但是不管怎样都会显示抖动...即使是20 fps!所以我必须找到第一个原因
答案 0 :(得分:0)
速度
速度是移动背景的速度 汽车的车速 速度= 5 carspeed = 10;
if (_lastUpdateTime) {
_deltaTime = interval - _lastUpdateTime;
} else {
_deltaTime = 0;
}
_lastUpdateTime = interval;
CGPoint bgVelocity = CGPointMake(speed*(direction),speed*(direction));
CGPoint bgVelocity1 = CGPointMake(carspeed*(direction), carspeed*(direction));
CGPoint amtToMove = CGPointMake((int)bgVelocity.x * _deltaTime, bgVelocity.y * _deltaTime);
CGPoint amtToMove1 = CGPointMake((int) bgVelocity1.x * _deltaTime, bgVelocity1.y * _deltaTime)
self.position = CGPointMake((int)(self.position.x+amtToMove.x), self.position.y+amtToMove.y);
car.position = CGPointMake((int)(self.position.x+ amtToMove1), self.position.y+ amtToMove1.y);
//现在开车并以相同的方向移动相同的增量时间