SpriteKit重力和速度有不同的设备上

问题描述:

我想达到以下不一致速度:SpriteKit重力和速度有不同的设备上

  • 玩家落在因为重力

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

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

问题是你使用常量来提高速度。请记住,屏幕密度因设备屏幕而异(意味着只有一个逻辑屏幕点的像素更多)。

您可以使用屏幕比例属性应用于您的速度。 因此,例如在iPhone4上,每帧10个像素的速度将与iPhone5屏幕上每帧20个像素的速度相同(因为iPhone5设备具有视网膜显示并且像素数量增加了一倍)

您可以访问屏幕的比例为:

CGFloat scale = [[UIScreen.mainScreen] scale]; 

CGVector relativeVelocity = CGVectorMake(0, (400-self.playerNode.physicsBody.velocity.dy) * scale); 
+0

我试过了你的解决方案,但是在不同的设备上速度仍然不同,游戏场景的大小是否会产生影响?在iPad上,场景的分辨率远高于iPhone。 – janseeuw

+0

我给你的例子只适用于玩家的速度,但是这也应该适用于影响游戏速度(包括重力)的所有其他属性。 – giorashc

+0

是的,我知道并且我将它应用于玩家的速度性和重力。 – janseeuw

我知道我发现的一件事。我在视网膜模式(960x600)下运行我的MacBook Pro 17“如果我运行我的SpriteKit游戏并且发射导弹,如果我处于视网膜模式,它大约是父亲的3.6倍(调整后的速度)。非hiDPI模式,这很奇怪,因为你在说如果导弹需要更多的像素行进,它应该在视网膜模式下比在非视网膜模式下减少一半,我正在寻找如何提交一个bug,因为我例如,我认为这是一个,