【问题标题】:Lower Left Coordinates of SKSceneSKScene的左下坐标
【发布时间】:2015-01-03 23:34:27
【问题描述】:

我是 Swift SpriteKit 编程的新手,坐标系让我发疯。我创建了一个精灵,我想将它移动到屏幕的四个角。所以,我将位置设置为(0,0)。那是在屏幕的左下角。通过一些手动测试,我开发了下面的图表。左下和右上是我触摸屏幕时iOS模拟器报告的内容。

我有两个问题:

1:有确定视图左下角坐标的方法吗?也许我可以用坐标值构建一个字典并确定机器类型,然后设置偏移量。但是,这需要大量工作,并且对于新设备可能并不准确。似乎应该有一个场景或框架属性,我可以使用它来将一个对象放在窗口的左下角。

2:数学不成立。在 iPhone5 中,300(左下 x)+ 320(宽度)= 620,而不是报告的 727。同样的问题也适用于 y 坐标。这是如何工作的?

我设置的参数尽可能少。我没有改变场景的锚点或位置。

设备尺寸 LL UR iPhone4s (320,480) (260,0) (766,764) iPhone5 (320,568) (300,0) (727,764) iPhone5s (320,568) (298,0) (727,764) iPhone6 (375,667) (297,1) (728,765) iPhone6plus (414,736) (298,0) (728,766) iPad2 (768,1024) (226,0) (800,768) iPad Air (768,1024) (224,0) (800,767) iPad 视网膜 (768,1024) (225,0) (800,768)

【问题讨论】:

  • 底线,我只是想弄清楚精灵何时离开屏幕。任何帮助将不胜感激。
  • 发布您的代码。坐标取决于您截取触摸事件的位置(场景还是精灵?),可能是锚点(位置 0,0 的精灵将使其居中在 0,0),场景缩放模式,如何转换坐标到场景/世界空间

标签: swift sprite-kit coordinates


【解决方案1】:

好的,我想我想通了。设置 scene!.scaleMode=SKSceneScaleMode.ResizeFill 可以让我识别屏幕的四个角。所以,现在我可以确定精灵何时越过屏幕边缘。这似乎不会扭曲我的图像。我还不能在读取设备上对其进行测试,但它在 iPad2 周围留下了一个空白区域。

【讨论】:

    【解决方案2】:

    为辛勤工作鼓掌!哈哈 如果我要获取较低坐标的值,我将使用 CGRectGetMinX 获取 x 坐标,并使用 CGRectGetMinY 同样获取 y 坐标:

    CGPoint minimum = CGPointMake(CGRectGetMinX(self.frame),CGRectGetMinY(self.frame));

    然后,如果您想获得顶部坐标,只需使用相同的东西,但使用 MaxX 或 MaxY。是的,坐标有点混乱,但如果你使用它们,那就轻而易举了。

    编辑:如果您需要确定一个物体是否已经离开可见空间,那么到目前为止对我有用的是制作一个物理物体来检测与它在边缘的接触

    [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]

    您可以尝试的另一个选项是查看 UIScreen 对象的边界。

    【讨论】:

    • M321K:感谢您的想法,但返回的点是 (0,0) 而不是 (300,0) 或任何适当的值。
    • 我可以告诉你中点是准确的 XD 这真的很奇怪!我刚刚打开了我的一个游戏,那里有一行写着 floor.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMinY(self.frame) + 5);所以然后我运行了这个东西,果然在框架的底部可以看到地板。尝试测试一些对象...
    • 我发现了同样的事情。中点将一个对象放在屏幕的中间。但是,我找不到任何可以告诉我物体何时退出场景的信息。我只会在边界周围放一些东西,但我不知道它在哪里!
    • 地板有效,因为所有窗户的最小值都为 0(见上图)。 LL 列中的所有 y 坐标都是 0。它只是偏移的 x 坐标,我找不到任何方法来确定偏移量。
    猜你喜欢
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 2014-08-23
    • 2015-06-20
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多