2017-10-10 33 views
-1

我想創建一個具有spriteKit視圖的通用應用程序。
但iPad的顯示屏比iPhone顯示屏更大!根據不同顯示器的大小調整SpriteKit視圖中的節點大小

1)如何根據顯示尺寸定位調整大小的節點?我的意思是當我爲iPhone添加節點時,我不希望iPad上的這個節點的維度等於iPhone上的維度,我希望每個不同的屏幕具有不同大小的相同節點。

2)還有我怎樣才能定位這個節點的不同顯示?

感謝很多

回答

0

首先設定了一個自動的保證金爲您的應用程序:

var gameArea: CGRect 

override init(size: CGSize) { 

    let maxAspectRatio: CGFloat = 16.0/9.0 
    let playableWidth = size.height/maxAspectRatio 
    let margin = (size.width - playableWidth)/2 
    gameArea = CGRect(x: margin, y: 0, width: playableWidth, height: size.height) 

    super.init(size: size) 
} 

然後你就可以實現你的SKNode

player.physicsBody = SKPhysicsBody(polygonFrom: path) 
player.physicsBody!.affectedByGravity = false 
player.physicsBody!.categoryBitMask = PhysicsCategories.Player 
player.physicsBody!.collisionBitMask = PhysicsCategories.None 
player.physicsBody!.contactTestBitMask = PhysicsCategories.Enemy 
player.constraints = [SKConstraint.positionX(SKRange(lowerLimit: gameArea.minX + player.size.width/2, upperLimit: gameArea.maxX - player.size.width/2))]` 
+0

謝謝你,但我的意思是顏色不精靈節點。 –

+0

噢好吧,很遺憾,我不能幫你那個.. – 2017-10-10 18:07:08

+0

這是幾乎一樣的.aspectFit但有更多的工作 – Knight0fDragon

0

我想有型動物相同的節點尺寸爲每個不同的 屏幕。

如果我知道你想什麼,在這裏我的答案:

你有兩個選擇:

1 - https://www.raywenderlich.com/49695/sprite-kit-tutorial-making-a-universal-app-part-1

2 - 編程調整:

// code in objc 

// defines global 
#define IS_IPAD  (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 

#define SCALE_FACTOR (IS_IPAD ? 2 : 1) // what ever you want 

// usage in the code 
sprite.size = CGSizeMake(width * SCALE_FACTOR, height * SCALE_FACTOR); 

// etc... 

編輯:

位置總是相對於父母。這裏的定位點也很重要。這裏舉一個例子,如何添加一個標籤直接到現場。標籤位置是頂部中間

func addBestScoreLabel(bestScore: Int) { 
     let bestScoreLabel = SKLabelNode() 

     bestScoreLabel.text = "Best Score: " + String(bestScore) 
     bestScoreLabel.fontSize = 20 // what ever 
     bestScoreLabel.fontColor = .red // what ever 
     bestScoreLabel.zPosition = 10 // what ever 
     bestScoreLabel.position = CGPoint(x: self.frame.width/2, y: self.frame.height - bestScoreLabel.frame.height) 

     // add the label to the scene 
     self.addChild(bestScoreLabel) 
    } 

// call the function 
addBestScoreLabel(bestScore: 1234) 
+0

我必須把代碼? –

+0

首先你創建你的精靈,對吧?之後,你給它一個大小。當你這樣做時,你可以考慮取決於設備的比例因子。 – Yann

+0

你可以寫代碼嗎?這是我的代碼:bestScoreLabel.position = CGPoint(x:self.frame.width/256,y:self.frame.height/256 + self.bestScoreLabel.frame.width/3 - 20) bestScoreLabel.scale(to :CGSize(width:self.frame.width - 30,height:self.frame.width/2))非常感謝 –

相關問題