我实际上正在用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)