Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 精灵套件-旋转后精灵随机向上漂移_Ios_Sprite Kit - Fatal编程技术网

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

Ios 精灵套件-旋转后精灵随机向上漂移,ios,sprite-kit,Ios,Sprite Kit,为了简单起见,场景有一个圆形精灵和一个方形精灵。方形精灵是围绕圆形精灵跟随的SKNode的子节点,因此方形始终围绕圆形旋转。但是,旋转节点时,正方形会随机向上漂移。一旦旋转一圈一圈,这种行为就会停止。代码如下: _square = [SKSpriteNode spriteNodeWithImageNamed:@"square"]; _circle = [SKSpriteNode spriteNodeWithImageNamed:@"circle"]; _circle.position = CG

为了简单起见,场景有一个圆形精灵和一个方形精灵。方形精灵是围绕圆形精灵跟随的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];
}

}


有人知道为什么会发生这种情况吗?

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


奇怪的是,很可能是因为您正在手动重新定位rotateNode,这将移动其所有子节点,包括square。但在每一帧中,您也要手动重新定位正方形。所以旋转节点旋转,改变正方形的位置,因为它旋转了,然后重新定位正方形,使其具有固定的偏移。根据您的目标是在世界空间还是在父空间中定位正方形,将变得更加复杂。但不清楚您的目标是什么。

这段代码看起来不像是可以编译的,因为您正在将CGPoint作为一个孩子添加到self中。你在第三行第二次指定圆圈时有打字错误吗?
-(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);