SpriteKit - 将精灵旋转到点

时间:2014-06-09 03:53:32

标签: objective-c sprite-kit sprite

我正在制作一个游戏,其中一群敌人在屏幕外产生并向中心移动(那里有一个空间站)。但是,我需要太空船面向中心方向。目前,我正在使用此代码:

- (void)rotateNode:(SKNode *)nodeA toFaceNode:(SKNode *)nodeB {

double angle = atan2(nodeB.position.y - nodeA.position.y, nodeB.position.x - nodeA.position.x);

if (nodeA.zRotation < 0) {
    nodeA.zRotation = nodeA.zRotation + M_PI * 2;
}

[nodeA runAction:[SKAction rotateToAngle:angle duration:0]];
}

但它只给出了这个结果:

bad rotation

我应该如何让精灵正确旋转?

所有建议都表示赞赏!

编辑:

我在Enemy sprite的init方法中调用上面的代码

-(id)initWithLevel:(int)level andSize:(CGSize)size{
if(self = [super initWithImageNamed:@"alien01"]){
    //position and init stuff

    [self setPosition:self withSeed:seed andSize:size];
    SKNode *center = [[SKNode alloc] init];
    center.position = CGPointMake(self.size.width/2, self.size.height/2);
    [self rotateNode:self toFaceNode:center];
}
return self;
}

1 个答案:

答案 0 :(得分:1)

你的问题在于:

SKNode *center = [[SKNode alloc] init];
center.position = CGPointMake(self.size.width/2, self.size.height/2);
[self rotateNode:self toFaceNode:center];

中心节点的位置基于敌人精灵的大小。

您需要将此部件移动到场景类。在初始化场景中的敌方节点时调用该方法。我假设敌人类的名称为EnemySprite,空间站节点的名称为SpaceStation。

EnemySprite *enemy = [[EnemySprite alloc] initWithLevel:1 andSize:CGSizeMake(100, 100)]; //Assuming values as well
[self addChild:enemy];
[self rotateNode:enemy toFaceNode:spaceStation];

这应该可以使它发挥作用。