我正在写一款自上而下的赛车游戏。游戏的快速解剖是: 通过在更新方法中设置physicsBody速度来移动“汽车节点”(我想设置物理体的速度而不是位置,因为我想在游戏中的任何地方检索汽车对象的速度值...),所以这是汽车运动:
float dx=JoyPadRelativePosition.x*_maxSpeed;
float dy=JoyPadRelativePosition.y*_maxSpeed;
[self.car.physicsBody setVelocity: CGVectorMake(dx,-dy)];
在didSimulatePhysics的同时,我移动了_worldNode,让汽车始终位于屏幕中央:
CGPoint target = [self pointToCenterViewOn:self.car.position];
CGPoint newPosition = _worldNode.position;
newPosition.x += (target.x - _worldNode.position.x);
newPosition.y += (target.y - _worldNode.position.y);
SKAction *actionMove = [SKAction moveTo:newPosition duration:0.4];
[_worldNode runAction:actionMove];
使用此代码,背景的移动和汽车的运动在Ipad2和iphone5中以60 fps正常平滑地工作。问题来自iphone4,该设备的背景抖动和全局fps降至40 fps。阅读stackOverflow问题和一些博客我找到了解决方案,将全局fps限制为30(这样我可以确保所有设备都以相同的速率运行)。
_skView.frameInterval=2;
无论如何,无论如何我的背景都会在Ipad2,iphone5和Iphone 4(所有真实设备)中抖动。为什么?由于新标准的30 fps速率,我必须在代码中修改一些内容吗?
答案 0 :(得分:0)
由于您正在使用物理模拟,您是否考虑过降低iPhone4的速度?您可以将物理模拟的速度设置为0.5而不是默认值1,并查看是否有助于抖动。查看speed
的{{1}}方法。