精灵套件 - 旋转后随机向上漂移的精灵

时间:2015-06-17 22:40:57

标签: ios sprite-kit

为简单起见,场景有一个圆形精灵和一个方形精灵。方形精灵是围绕圆形精灵的SKNode的子节点,因此方形的旋转总是围绕圆形发生。但是,当节点旋转时,方形随机向上漂移。一旦旋转一路走来,这种行为就会停止。这是代码:

_square = [SKSpriteNode spriteNodeWithImageNamed:@"square"]; 
_circle = [SKSpriteNode spriteNodeWithImageNamed:@"circle"];
_circle.position = CGPointMake(-200, 300);
[self addChild:_circle];
_rotateNode = [SKNode node];
_rotateNode.position = CGPointMake(300, 300);
[self addChild:_rotateNode];
[_rotateNode addChild:_square];


SKAction *moveBall = [SKAction moveTo:CGPointMake(1200, 300) duration:12];
[_circle runAction:moveBall];

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
SKAction *rotate = [SKAction rotateByAngle:-M_PI_2 duration:0.2];
[_rotateNode runAction:rotate];

}

-(void)update:(CFTimeInterval)currentTime {

_rotateNode.position = _circle.position;
double xOffset = (300 -_circle.position.x);
double yOffset = (300 - _circle.position.y);
_square.position = CGPointMake(xOffset, yOffset);

}

任何人都知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

如果我理解这个问题,你会问为什么广场以意想不到的方式移动?圆圈正在移动,但是在每一帧上你都将rotateNode的位置设置为与圆相同,并且它们都具有相同的父级:self,所以我们可以忽略circle进行任何调试,因为它只是每帧执行一次动作获得一个新职位。

奇怪,很可能是因为你手动重新定位rotateNode,然后移动所有的子节点,包括square。但是在每一帧中你也可以手动重新定位方块。所以rotateNode旋转,因为它旋转会改变方形的位置,然后你重新定位square以得到一个固定的偏移量。进一步复杂化取决于您的目标是将方块放置在世界空间还是父空间中。但目前还不清楚你的目标是什么。