SpriteKit:坐标系有什么用?

时间:2015-10-08 02:11:35

标签: ios swift sprite-kit

我自己教我如何通过编写一个简单的游戏来编写SpriteKit编程,这个游戏需要我设置一个正方形的游戏领域"在风景导向的场景的左侧。我只是使用你在创建新SpriteKit时获得的股票1024x768视图" Game"在XCode项目 - 没什么特别的。然而,当我在didMoveToView()中设置游戏区域时,我发现坐标系统有点奇怪。首先,我预计我必须将电路板置于(0,0)以使其出现在左下角。事实并非如此 - 事实证明,游戏板必须在y方向上碰到大约96个像素才能工作。所以我最终得到了这个奇怪的代码:

    let gameFieldOrigin = CGPoint(x:0, y:96) // ???
    let gameFieldSize = CGSize(width:560, height: 560)
    let gameField = CGRect(origin: gameFieldOrigin, size: gameFieldSize)

    gameBorder = SKShapeNode(rect: gameField)
    gameBorder.strokeColor = UIColor.redColor()
    gameBorder.lineWidth = 0.1

    self.addChild(gameBorder) // "self" is the SKScene subclass GameScene

此外,当我向它添加一个孩子(一个在场内反弹的球)时,我假设我只是使用相对坐标将它放在中心。但是,我最终不得不使用"绝对"坐标,我不得不再次将y坐标偏移96。

我注意到的另一件事是当我调用touch.locationInNode(gameBorder)时,坐标再次不是相对于边框,而是从边框底部的(0,96)开始而不是(0,0),因为我我会猜到的。

那我在这里错过了什么?我是否误解了有关坐标如何工作的基本信息?

[PS:我想添加标签" SpriteKit"对于这个问题,但我没有足够的代表。 :/]

1 个答案:

答案 0 :(得分:1)

您希望将整个屏幕作为坐标系引用,但实际上您正在设置 GameScene.sks 加载的场景中的所有内容。正确的方法是修改 GameViewController.swift 中的一行,以便将场景大小设置为与屏幕大小相同。像这样初始化场景大小而不是从.sks文件中取消归档:

let scene = GameScene(size: view.bounds.size)

不要忘记删除if语句,因为我们不再需要它了。这样,(0,0)位于左下角。

要放东西,例如aNode,在场景的中心,您可以设置其位置,如:

aNode.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));