Spritekit - 屏幕坐标的底部

Posted

技术标签:

【中文标题】Spritekit - 屏幕坐标的底部【英文标题】:Spritekit - Bottom of screen coordinates 【发布时间】:2014-05-09 05:43:14 【问题描述】:

屏幕底部的坐标是多少……或者如何在 spritekit 中创建屏幕底部的“地板”?

抱歉,我不太了解 spritekit 中的屏幕坐标。

【问题讨论】:

【参考方案1】:

您需要了解 Apple 文档 here 中解释的 Sprite Kit 坐标系。

以下是在 SpriteKit 屏幕底部创建地板的方法:

SKNode *floor = [SKNode node];
node.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(CGRectGetMidX(self.frame),1.0 , CGRectGetWidth(self.frame), 1)];
[self addChild: floor];

【讨论】:

当我这样做时,地板位于屏幕中间。 更改 cgrectmake 中的 x 和 y 值,如已编辑的答案中一样【参考方案2】:

您需要一些通用的方法来获取屏幕上角的坐标。

使用来自that 答案的代码,您可以获得包含必要信息的 CGRect。

例子:

let screenRect = getVisibleScreen(
                 sceneRect: self.scene!.frame,
                 viewRect: self.view!.frame )

然后你就可以使用它了:

screenRect.minX
screenRect.maxX

screenRect.minY
screenRect.maxY

screenRect.width
screenRect.height

这足以计算“地板”或任何其他相对位置的坐标。

【讨论】:

【参考方案3】:

屏幕底部的位置取决于您在场景中使用的坐标系。

开箱即用,屏幕底部的 y 坐标为零,但可能会发生一些影响它的事情。

例如,如果您在 xCode 中使用场景编辑器,并且场景的 anchorPoint 属性不是 y=0,那么场景的“原点”将不会位于屏幕底部。在最近的 xCode 测试版中,他们更改了默认行为,使场景的原点位于场景的中心而不是左下角,这样就可以解释为什么您可能会在期望它们时看到屏幕中心的东西在底部。

此外,“屏幕底部”将与您在场景中的任何育儿结构相关。例如,如果您在场景中放置了一个背景精灵,并且想要将一个地板精灵附加到屏幕底部的 that,那么您必须进行一些计算才能确定在哪里放置它,因为您将继承地板父节点(以及该节点具有的任何父节点)的平移和旋转。

为简单起见,您可以将所有内容直接放在舞台上并手动管理其 z 顺序。基本上,这将让您对所有内容使用相同的坐标系。这通常很好;只要你不想对你的精灵做任何复杂的事情,你就不需要一个复杂的节点“树”。

但即使使用这种方法,您的场景指标也必须动态处理。场景的宽度和高度将取决于您如何在不同尺寸的不同设备上显示场景。例如,iPhone 4 的右上角将与 iPad Pro 的右上角不同。关于如何处理的完整讨论超出了您的问题范围,但通常,您可能希望为您的场景使用“参考宽度”或“参考高度”,使用 .AspectFit 或 .AspectFill scaleMode,并相应地设置场景的大小。 (即,检查视图的框架以获取场景的实际纵横比,并设置场景大小以匹配一个轴上的参考指标并缩放另一轴以匹配设备的纵横比。)这将让您使用相同的指标适用于所有设备(尽管您的两个轴之一将是流动的)。

【讨论】:

以上是关于Spritekit - 屏幕坐标的底部的主要内容,如果未能解决你的问题,请参考以下文章

Sprite Kit 中的顶部屏幕 iAd

Sprite不会用手指/ SpriteKit / Swift 3移动

Physics Body 边缘 IOS8,Sprite Kit

Sprite Kit 碰撞检测仅适用于左右屏幕边缘

Sprite 套件 CGPoint 未按预期工作

我的代码有啥问题? Swift 3 sprite kit 信号 sigabbt [关闭]