SKSpriteNode上的CGPoint x无法正常工作(节点的一半节点出屏)

时间:2014-07-18 23:25:42

标签: position swift sprite-kit cgpoint

我实际上是在Swift SpriteKit中开发游戏。

我设置了SKSpriteNode的位置:

skPart1.position = CGPointMake(0, 100)

因此节点应该从最左边的窗口边缘开始。

    |-------------------------|   
    |-------------------------|
    |-------------------------|
    |-------------------------|
    |==========|--------------|
    |==========|--------------|
    |==========|--------------|

但实际上我的一半SKSpriteNode在屏幕之外:

     |-------------------------|   
     |-------------------------|
     |-------------------------|
     |-------------------------|
==========|--------------------|
==========|--------------------|
==========|--------------------|

我已经在stackoverflow上读到了同样的问题,但是提供的唯一解决方案是将scaleMode设置为AspectFit。 我发现它适用于SKShapeNode。但为什么不在SKSpriteNode? 而且我已经尝试过了。

我该如何解决?

2 个答案:

答案 0 :(得分:3)

SKSpriteNode有一个anchorPoint属性,默认为图像的中心,这就是精灵的一半离屏幕左侧的原因。

您可以调整anchorPoint,使其行为与SKShapeNode的行为类似,左下角有锚点。试试这个:

skPart1.anchorPoint = CGPointMake(0,0);

我知道你已经接受了答案,但这是处理这种情况的理想方式,这就是房产存在的原因。

答案 1 :(得分:1)

我认为这实际上取决于您使用的SKShapeNode。如果您使用的是矩形,那么您给出的点将是矩形的左下角。但是如果你使用SKShapeNode圆圈,它会将圆圈放在你给它的那个点的中心位置,你会看到与SKSpriteNode非常相似的行为。

SKSpriteNode使用图像的中心作为它放置精灵的点,所以当你将节点放在(0,100)时,正好有一半正在绘制到屏幕的左边

如果你希望你的精灵尽可能地被绘制,但是完全在屏幕上绘制,你应该能够通过偏移精灵宽度的一半来实现这一点。

skPart1.position = CGPoint(x: skPart1.size.width / 2, y: 100)