我自己教我如何通过编写一个简单的游戏来编写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"对于这个问题,但我没有足够的代表。 :/]
答案 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));