2014-06-09 7 views
2

나는 원수가 화면 밖으로 나오고 중심쪽으로 움직입니다 (우주 정거장이있는 곳). 그러나 나는 중심 방향으로 향하는 우주선이 필요하다. 현재,이 코드를 사용하고 있습니다 :SpriteKit - 점을 향하여 스프라이트를 회전

- (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

가 어떻게 스프라이트가 제대로 회전 가야를?

모든 제안 사항에 감사드립니다.

는 편집 : 나는 적 스프라이트의 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

이 메서드는 어디서 어떻게 호출합니까? – ZeMoon

+0

적을 만들 때이 메서드를 호출합니다. 바로 전에 SKAction을 실행하여 중심쪽으로 이동합니다. – Lamikins

+0

코드로 자세히 설명하십시오. 어떤 방법을 호출하는지 (예 : 업데이트 방법) 묻는 것을 의미 함 – ZeMoon

답변

1

의 문제가이있다 :

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

센터 노드의 위치를 ​​기반으로 적군의 크기.

이 부분을 장면 클래스로 이동해야합니다. 장면에서 적 노드를 초기화 할 때 메서드를 호출합니다. 적 클래스의 이름을 EnemySprite로, 우주 스테이션 노드의 이름을 우주 스테이션으로 가정합니다.

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

이렇게하면 효과가 있습니다.

+0

감사합니다! 나는 또한 내 스프라이트 텍스처가 올바른 방향으로 회전되지 않았다는 것을 깨달았습니다. 그래서 약간의 사진을 편집 한 다음 당신의 답변을 사용하면 완벽하게 작동했습니다! – Lamikins

관련 문제