我想創建一個具有spriteKit視圖的通用應用程序。
但iPad的顯示屏比iPhone顯示屏更大!根據不同顯示器的大小調整SpriteKit視圖中的節點大小
1)如何根據顯示尺寸定位調整大小的節點?我的意思是當我爲iPhone添加節點時,我不希望iPad上的這個節點的維度等於iPhone上的維度,我希望每個不同的屏幕具有不同大小的相同節點。
2)還有我怎樣才能定位這個節點的不同顯示?
感謝很多
我想創建一個具有spriteKit視圖的通用應用程序。
但iPad的顯示屏比iPhone顯示屏更大!根據不同顯示器的大小調整SpriteKit視圖中的節點大小
1)如何根據顯示尺寸定位調整大小的節點?我的意思是當我爲iPhone添加節點時,我不希望iPad上的這個節點的維度等於iPhone上的維度,我希望每個不同的屏幕具有不同大小的相同節點。
2)還有我怎樣才能定位這個節點的不同顯示?
感謝很多
首先設定了一個自動的保證金爲您的應用程序:
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))]`
我想有型動物相同的節點尺寸爲每個不同的 屏幕。
如果我知道你想什麼,在這裏我的答案:
你有兩個選擇:
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)
我必須把代碼? –
首先你創建你的精靈,對吧?之後,你給它一個大小。當你這樣做時,你可以考慮取決於設備的比例因子。 – Yann
你可以寫代碼嗎?這是我的代碼: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))非常感謝 –
謝謝你,但我的意思是顏色不精靈節點。 –
噢好吧,很遺憾,我不能幫你那個.. – 2017-10-10 18:07:08
這是幾乎一樣的.aspectFit但有更多的工作 – Knight0fDragon