2014-02-22 2 views
4

작은 SpriteKit 게임을 만들고 있습니다. 이 게임의 "적"이 플레이어 주변의 무작위 경로 (정적 인)로 이동하기를 바랍니다.랜덤 경로에서 SKSpriteNode의 매끄러운 동작

화면에서 임의의 지점을 선택하고 거기에 모션을 애니메이션으로 적용한 다음 (예 : 2 초마다) 반복하면 모션에 매우 들쑥날쑥 한 느낌을줍니다.

이 무작위 모션을 매우 매끄럽게 만드는 방법 (예 : 적을 뒤집기로 결정한 경우 톱니 모양이 아닌 부드러운 U 턴 경로가됩니다).

추신 : 적들은 플레이어와 상대방을 피해야합니다.

답변

5

노드가 따라야하는 CGPathRef으로 SKAction을 만들 수 있습니다. 또한보다 복잡한 경로를 정의하고 객체가 그들을 따라하기 위해 임의의 UIBezierPath를 만들 수 있습니다

SKSpriteNode *myNode = ... 

CGPathRef circlePath = CGPathCreateWithEllipseInRect(CGRectMake(0, 
                   0, 
                   400, 
                  400), NULL); 
SKAction *followTrack = [SKAction followPath:circle 
            asOffset:NO 
           orientToPath:YES 
            duration:1.0]; 

SKAction *forever = [SKAction repeatActionForever:followTrack]; 
[myNode runAction:forever]; 

: 여기

노드가 원을 만드는 방법에 대한 예입니다. 예를 들어

는 :

UIBezierPath *randomPath = [UIBezierPath bezierPath]; 
[randomPath moveToPoint:RandomPoint(bounds)]; 
[randomPath addCurveToPoint:RandomPoint(YourBounds) 
       controlPoint1:RandomPoint(YourBounds) 
       controlPoint2:RandomPoint(YourBounds)]; 

CGPoint RandomPoint(CGRect bounds) 
{ 
    return CGPointMake(CGRectGetMinX(bounds) + arc4random() % (int)CGRectGetWidth(bounds), 
         CGRectGetMinY(bounds) + arc4random() % (int)CGRectGetHeight(bounds)); 
} 

당신은 노드가 SKAction를 사용하여 경로를 따라하고 액션이 (노드가 경로의 끝에)이 완료되면, 당신은 새로운 경로를 계산합니다.

올바른 방향을 알려야합니다. 당신이 임의의 경로를 생성 할 경우

+0

호르헤 코스타 올랜도 페레이라에 의해 코딩은 ... 나는 그것이 임의의 페이지해야 ath ... 어쩌면 내가 2 초마다 임의의 매개 변수와 함께 새로운 cgpathref를 추가 할 수 있습니다 그리고 그냥 현재 애니메이션을 취소하고 새로운 하나를 시작 ... – user1028028

+0

무작위'UIBezierPath'를 만드는 코드로 내 대답을 업데이 트했습니다. – RaffAl