繁体   English   中英

SpriteKit:坐标系是怎么回事?

[英]SpriteKit: What's up with the coordinate system?

我正在教自己如何通过编写一个简单的游戏进行SpriteKit编程,该游戏要求我在面向景观的场景的左侧布置一个方形的“游戏场”。 我只是使用在XCode中创建新的SpriteKit“游戏”项目时获得的原始1024x768视图-没什么花哨的。 但是,当我在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) ,坐标又不再相对于边框,而是从边框底部的touch.locationInNode(gameBorder)开始而不是像我本来那样的(0,0)猜到了。

那我在这里想念什么? 我是否误解了坐标的工作原理?

[PS:我想在这个问题上添加标签“ SpriteKit”,但是我没有足够的代表。 :/]

您希望将整个屏幕作为坐标系进行引用,但实际上是在从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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM