Spritekit - 屏幕坐标的底部

时间:2014-05-09 05:43:15

标签: ios xcode sprite-kit

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

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

3 个答案:

答案 0 :(得分:3)

您需要了解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];

答案 1 :(得分:0)

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

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

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

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

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

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

答案 2 :(得分:0)

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

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

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