如何 scale/position 节点 Swift SpriteKit?自定义视图?
How to scale/position nodes Swift SpriteKit? Custom View?
我正在开发一款游戏,但无法找到缩放/定位所有内容的正确方法。我有一个通用应用程序,当我从一个设备切换到另一个设备时,节点并不是每次都在正确的位置。我正在使用 AspectFill,因为它以适合每个设备的正确方式调整我的节点大小。问题是定位。我不知道我得出的结论是否正确,我需要弄清楚如何使视图与屏幕大小相同,以便它针对每个设备进行更改,然后正确定位和缩放所有内容,但这就是我一直在想办法。我一直在网上尝试很多不同的东西,并研究如何制作自定义视图。我试图制作一个具有填充屏幕约束的矩形,然后将该矩形设置为等于 UIView 或 SKView。我尝试了很多不同的东西并在网上看了很多东西,但它们要么令人困惑,我不知道我是否在正确地尝试它们,或者它们不适合我的情况。这给我造成了很多困惑,我希望有人可以帮助解决这个问题。我认为问题是我需要制作一个与屏幕尺寸相关的自定义视图。我不知道这是否可能或我应该追求什么。如果有人可以为我解决这个问题,那就太好了。
为了让我的游戏具有普遍性,我将所有 node
的大小和位置都设置为 SKScene
大小
尝试使用 SKScene
尺寸的比例,而不是使用硬编码数字。例如:
而不是这样写:
node.position = CGPointMake(100, 100)
这样写:
node.position = CGPointMake(world.frame.size.width / 32 * 16, world.frame.size.height / 18 * 9)
world - SKNode
of exactly same size as your SKScene
尺寸相同
let blackSquare = SKSpriteNode(texture: nil, color: UIColor.blackColor(), size: CGSizeMake(world.frame.size.width / 32, world.frame.size.width / 32))
另外 GameViewController
应该看起来像这样:
override func viewDidLoad() {
super.viewDidLoad()
// Configure the view
let skView = view as! SKView
skView.multipleTouchEnabled = false
// Create and configure the scene
let scene = GameScene(size: skView.bounds.size)
scene.scaleMode = .AspectFill
scene.size = skView.bounds.size
skView.presentScene(scene);
}
这有用吗?
我正在开发一款游戏,但无法找到缩放/定位所有内容的正确方法。我有一个通用应用程序,当我从一个设备切换到另一个设备时,节点并不是每次都在正确的位置。我正在使用 AspectFill,因为它以适合每个设备的正确方式调整我的节点大小。问题是定位。我不知道我得出的结论是否正确,我需要弄清楚如何使视图与屏幕大小相同,以便它针对每个设备进行更改,然后正确定位和缩放所有内容,但这就是我一直在想办法。我一直在网上尝试很多不同的东西,并研究如何制作自定义视图。我试图制作一个具有填充屏幕约束的矩形,然后将该矩形设置为等于 UIView 或 SKView。我尝试了很多不同的东西并在网上看了很多东西,但它们要么令人困惑,我不知道我是否在正确地尝试它们,或者它们不适合我的情况。这给我造成了很多困惑,我希望有人可以帮助解决这个问题。我认为问题是我需要制作一个与屏幕尺寸相关的自定义视图。我不知道这是否可能或我应该追求什么。如果有人可以为我解决这个问题,那就太好了。
为了让我的游戏具有普遍性,我将所有 node
的大小和位置都设置为 SKScene
大小
尝试使用 SKScene
尺寸的比例,而不是使用硬编码数字。例如:
而不是这样写:
node.position = CGPointMake(100, 100)
这样写:
node.position = CGPointMake(world.frame.size.width / 32 * 16, world.frame.size.height / 18 * 9)
world -
SKNode
of exactly same size as yourSKScene
尺寸相同
let blackSquare = SKSpriteNode(texture: nil, color: UIColor.blackColor(), size: CGSizeMake(world.frame.size.width / 32, world.frame.size.width / 32))
另外 GameViewController
应该看起来像这样:
override func viewDidLoad() {
super.viewDidLoad()
// Configure the view
let skView = view as! SKView
skView.multipleTouchEnabled = false
// Create and configure the scene
let scene = GameScene(size: skView.bounds.size)
scene.scaleMode = .AspectFill
scene.size = skView.bounds.size
skView.presentScene(scene);
}
这有用吗?