我正在制作一个游戏,其中一群敌人在屏幕外产生并向中心移动(那里有一个空间站)。但是,我需要太空船面向中心方向。目前,我正在使用此代码:
- (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]];
}
但它只给出了这个结果:
我应该如何让精灵正确旋转?
所有建议都表示赞赏!
编辑:
我在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;
}
答案 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];
这应该可以使它发挥作用。