我想用spriteKit视图创建一个通用应用程序 但iPad的显示屏比iPhone显示屏更大!
1)如何根据显示尺寸定位调整大小的节点?我的意思是当我为iPhone屏幕添加一个节点时,我不希望在iPad上这个节点的尺寸等于iPhone上的尺寸,我想要为每个不同的屏幕设置不同大小的相同节点。
2)还有我如何定位这些节点以进行不同的显示?
非常感谢
答案 0 :(得分: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))]`
答案 1 :(得分: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)