SKSpriteNode上的CGPoint x不能正常工作(一半的节点出屏幕)



我实际上正在用Swift SpriteKit开发一款游戏。

我设置了SKSpriteNode的位置:

skPart1.position = CGPointMake(0, 100)

所以节点应该从最左边的窗口边缘开始。

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

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

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

我在stackoverflow上读过同样的问题,但提供的唯一解决方案是,将scaleMode设置为AspectFit。我发现了,它可以和SKShapeNode一起工作。但是为什么不在SKSpriteNode中呢?我已经试过了。

我怎样才能解决这个问题?

SKSpriteNode有一个默认为图像中心的锚点属性,这就是为什么一半的精灵不在屏幕左侧的原因。

您可以调整锚点,使其表现得像左下角的锚点的SKShapeNode。试试这个:

skPart1.anchorPoint = CGPointMake(0,0);

我知道你已经接受了一个答案,但这是处理这种情况的理想方式,这就是为什么这个属性存在的原因。

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

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

如果你想让你的精灵画得尽可能靠左,但完全在屏幕上,你应该能够通过偏移精灵宽度的一半来实现这一点。

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

最新更新