Ios SpriteKit:将anchorpoint与SKNode和SKPhysicsBody一起使用

Ios SpriteKit:将anchorpoint与SKNode和SKPhysicsBody一起使用,ios,ios7,sprite-kit,Ios,Ios7,Sprite Kit,SKNode有一个anchorpoint属性,它的行为与我预期的一样。但是,如果我将SKNode的锚点从其默认值(即(0.5,0.5))更改,则SKNode的physicsbody将与场景中为SKNode显示的内容不对齐 我在IOS 7上 有没有办法解决这个问题,这样我就可以使用SKNode.anchorpoint的非默认值,而不会导致显示的SKNode和SKNode.physicsbody之间出现偏差 这里有一个例子。在SKScene.didMoveToView()实现中,添加以下代码: //

SKNode有一个anchorpoint属性,它的行为与我预期的一样。但是,如果我将SKNode的锚点从其默认值(即(0.5,0.5))更改,则SKNode的physicsbody将与场景中为SKNode显示的内容不对齐

我在IOS 7上

有没有办法解决这个问题,这样我就可以使用SKNode.anchorpoint的非默认值,而不会导致显示的SKNode和SKNode.physicsbody之间出现偏差

这里有一个例子。在SKScene.didMoveToView()实现中,添加以下代码:

// Set up the scene.
self.anchorPoint = CGPointMake(0.5, 0.5);
self.backgroundColor = [SKColor yellowColor];
self.scaleMode = SKSceneScaleModeAspectFill;

// BLOCK
SKSpriteNode *block = [SKSpriteNode spriteNodeWithColor:[SKColor greenColor] size:CGSizeMake(50, 50)];
block.name = @"Block";
block.anchorPoint = CGPointZero;
block.position = CGPointMake(0., 0.3*self.size.height);

block.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize: block.size];

[self addChild: block];

// FLOOR
SKSpriteNode *floor = [SKSpriteNode spriteNodeWithColor: [SKColor blueColor] size:self.size];

floor.name = @"Floor";

floor.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize: floor.size];
floor.physicsBody.dynamic = NO;

floor.position = CGPointMake(0., -0.9*self.size.height);

[self addChild: floor];

当我运行这个代码时,块掉到了地板上,但是它停在了地板上,因为它的物理体和它的精灵之间没有对齐。如果我注释掉设置块的锚点的行,一切正常。

为什么需要将块节点的锚点设置为零?另外,在初始化physicsBodyanchorpoint之后,尝试设置锚定点,这是一个纯粹的视觉属性,搜索它,我已经详细解释了多次,并且解决了这个问题。这个问题在这里有一个很好的解决方案:另外,这个问题在iOS 7.1中已经解决。为此实现了两个新方法。@WillNelson SKNode没有定位点(也没有SKEmitterNode、SKEffectNode、SKLabelNode)。SKSpriteNode和SKScene都有。