SpriteKit Gravity和Velocity在不同设备上的速度不一致

时间:2015-08-09 09:12:20

标签: ios objective-c sprite-kit

我正在努力实现以下目标:

  • 玩家因重力而跌倒

    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,...)上测试时,物体会以不同的速度下降并上升。

如何在所有设备上实现一致的速度?

2 个答案:

答案 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,因为我相信这是一个。

相关问题