【问题标题】:Swift self.frame.width and SKLabelNodeSwift self.frame.width 和 SKLabelNode
【发布时间】:2014-07-28 17:44:43
【问题描述】:

我正在学习 Swift,但在带有 SKLabelNode 的 Sprite Kit 中遇到了一些奇怪的定位问题。

我写了以下代码:

shareText.position = CGPointMake( self.frame.size.width / 2 , shareButton.position.y);

这完全符合我的预期。它使文本在屏幕上水平居中。

嗯,我在视觉上将我的屏幕一分为二,所以我希望除以 4 并让它在屏幕的左半边“居中”显示。

shareText.position = CGPointMake( self.frame.size.width / 4 , shareButton.position.y );

不幸的是,SKLabelNode 看起来好像位于与框架相关的“0”位置。事实上,根据我能看到的文字数量,它看起来有点负面。

当我使用 NSLog 检查它的位置时,当我除以 2 时,它说它的 x 位置是 512。当我除以 4 时,它说它的 x 位置是 256(我所期望的)但在视觉上,它不是甚至接近。我还尝试将其设置为 shareButton.position.x,它也是 256(并在视觉上准确地显示了我的期望),但我得到了相同的结果。当我手动将其设置为 400 左右时,它似乎可以工作。

Swift 有什么问题(我现在是测试版)还是我做错了什么?

【问题讨论】:

  • 了解 SpriteKit 使用的坐标系。
  • 我找到了更多关于这个问题的信息。从一些随机谷歌搜索中,我发现,在将场景更改为该场景时,如果我使用 SKSceneScaleMode.ResizeFill 而不是 AspectFill,它“修复”了问题并将文本移动到正确的位置,但完全破坏了场景的其余部分。所以这与此有关,但我应该做些什么不同的事情?
  • 正如我所说,您需要了解 SpriteKit 使用的坐标系。阅读documentation
  • 回复duc9y:我了解坐标系的基础知识。 0,0 应该在左下角。任何节点都以 0,0 作为其本地中心点。我发布了一个使用 Unity3D 的游戏,所以我对基本的 x,y 坐标系有一个牢固的掌握。只是 0,0 似乎不像我读过的那样是左下角。它似乎不在屏幕上。
  • 你的阅读量还不够。阅读positionanchorPoint 属性。要直接回复用户,请在您的评论中为他们的用户名添加 @ 符号前缀。例如,“@duci9y ”。

标签: ios swift sprite-kit


【解决方案1】:

所以我想我找到了问题所在,它与我的 Swift 代码无关,而是与 XCode 本身(或有关 XCode 默认如何运行的文档)有关。上述 cmets 中链接到的文档 @duci9y 提到了以下内容...

"所以,一个场景初始化为高1024宽768,原点(0,0)在左下角,(1024,768)坐标在右上角。”

我发现在我的 GameScene.sks 文件中,它默认为相反。宽度为 1024,高度为 768。我的游戏应该是纵向的,所以我希望它是文档中所说的那样,而不是 XCode 如何默认我的项目。我猜这意味着 (0,0) 会离开屏幕左侧 128 点,而不是纵向的左下角,但横向的正确位置。

我不确定这是否是 XCode 6 beta 4 的问题,或者列出的文档是否刚刚过时,但一旦我交换了这些数字,一切似乎都按我想要的方式工作。

【讨论】:

  • 嗯,这似乎有点工作,但有点不。默认情况下,屏幕肯定注册为我上面列出的那些尺寸。当我记录屏幕宽度和高度时,默认情况下它是向后的,正如我在上面发布的但在我“修复”它之后(0,0)仍然在屏幕外。正如我最初怀疑的那样,它正好在屏幕外 128 点,只有 x 坐标。如果我将节点位置设置为 (128,0),那么如果我将它设置为 (0,0),这正是我期望的位置。然而系统确实告诉我宽度现在是 768 而不是 1024。显然我仍然缺少一些东西。那好吧。继续看吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多