2015-08-09 51 views
2

我想達到以下不一致速度: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 ...)上測試此對象時,對象會以不同的速度下降並上升。

如何在所有設備上實現一致的速度?

回答

2

問題是你使用常量來提高速度。請記住,屏幕密度因設備屏幕而異(意味着只有一個邏輯屏幕點的像素更多)。

您可以使用屏幕比例屬性應用於您的速度。 因此,例如在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

0

我知道我發現的一件事。我在視網膜模式(960x600)下運行我的MacBook Pro 17「如果我運行我的SpriteKit遊戲並且發射導彈,如果我處於視網膜模式,它大約是父親的3.6倍(調整後的速度)。非hiDPI模式,這很奇怪,因爲你在說如果導彈需要更多的像素行進,它應該在視網膜模式下比在非視網膜模式下減少一半,我正在尋找如何提交一個bug,因爲我例如,我認爲這是一個,