Spritekit - 屏幕坐标的底部

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spritekit - 屏幕坐标的底部相关的知识,希望对你有一定的参考价值。

屏幕底部的坐标是什么......或者如何在spritekit中在屏幕底部创建“floor”?

对不起,但我不太了解spritekit中的屏幕坐标。

答案

您需要了解Sprite Kit坐标系统,如Apple的文档here中所述。

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

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

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

开箱即用,屏幕底部将在y坐标为零,但有一些事情可能会影响到它。

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

此外,“屏幕底部”将与您场景中的任何父级结构相关。例如,如果你在场景中放置一个背景精灵,并且想要将一个地板精灵附加到屏幕底部的精灵,那么你将不得不做一些计算以确定放置它的位置,因为你要去继承floor的父节点(以及该节点拥有的任何父节点)的转换和旋转。

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

但即使采用这种方法,您的场景指标也必须动态处理。场景的宽度和高度取决于您如何在不同尺寸的设备上显示场景。例如,iPhone 4的右上角将与iPad Pro的右上角不同。关于如何处理它的完整讨论超出了你的问题的范围,但一般来说,你可能想要为你的场景使用“参考宽度”或“参考高度”,使用.AspectFit或.AspectFill作为scaleMode,并相应地设置场景的大小。 (即,检查视图的帧以获得场景的实际宽高比,并设置场景大小以匹配一个轴上的参考度量,并缩放另一个轴以匹配设备的宽高比。)这将允许您使用相同的度量对于所有设备(尽管您的两个轴中的一个将是流体)。

另一答案

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

使用来自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

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

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

在 SpriteKit 中处理不同的 iOS 设备分辨率

更改 spritekit 中的节点颜色

SpriteKit 中坐标空间之间的转换问题

片段布局不覆盖整个屏幕

隐藏子屏幕/片段的android底部导航视图

Sprite Kit 中的顶部屏幕 iAd