我正在努力实现以下目标:
玩家因重力而跌倒
self.physicsWorld.gravity = CGVectorMake(0, -4.0);
当用户触摸屏幕时,播放器应该提升
-(void)update:(CFTimeInterval)currentTime {
if(self.isAscending)
{
CGVector relativeVelocity = CGVectorMake(0, 400-self.playerNode.physicsBody.velocity.dy);
self.playerNode.physicsBody.velocity=CGVectorMake(0, self.playerNode.physicsBody.velocity.dy+relativeVelocity.dy*0.05);
}
}
但是当我在不同的设备(iPhone 4s,iPhone 6 +,iPad,...)上测试时,物体会以不同的速度下降并上升。
如何在所有设备上实现一致的速度?
答案 0 :(得分:2)
问题是你使用常量来提高速度。请记住,屏幕密度在设备屏幕之间有所不同(意味着只有一个逻辑屏幕点的像素数更多)。
您可以使用屏幕比例属性应用于您的力度。 因此,例如在iPhone4上,每帧10像素的速度将与iPhone5屏幕上每帧20像素的速度相同(因为iPhone5设备具有视网膜显示并且像素数量加倍)
您可以按以下方式访问屏幕比例:
CGFloat scale = [[UIScreen.mainScreen] scale];
CGVector relativeVelocity = CGVectorMake(0, (400-self.playerNode.physicsBody.velocity.dy) * scale);
答案 1 :(得分:0)
我知道有一件事我发现了。我运行我的MacBook Pro 17"在视网膜模式(960x600)。如果我运行我的SpriteKit游戏并发射导弹,如果我处于Retina模式,它大约是父亲的3.6倍(调整速度)。比在常规的非hiDPI模式下。这很奇怪,因为你说如果导弹必须行进更多的像素,它在视网膜模式下应该比非视网膜模式下一半。我正在寻找如何提交bug,因为我相信这是一个。