2011-11-02 3 views
0

좋아, 여기에 우리가 간다. 나는 cocos2d 앱을 가지고 있으며 플레이어쪽으로 이동하는 타겟이 있습니다. 플레이어가 움직이면 플레이어에게 천천히 목적지를 다시 변경하여 빈 공간으로 이동하는 것이 아닙니다. 스프라이트 중간 동작의 대상을 변경할 수 있습니까?코코스 2D 스프라이트 대상 변경

편집 :

이의 코드입니다 - (무효)가이 하나의 문제를 제외하고 잘 작동

- (void)changeTargetDest { 
    NSMutableArray* deleteArray = [[NSMutableArray alloc] init]; 
    for(CCSprite* s in _targets) { 
     float offX = s.position.x - player.position.x; 
     float offY = s.position.y - player.position.y; 
     float adjustX; 
     float adjustY; 
     float offDistance = sqrt(powf(offX, 2.0f) + powf(offY, 2.0f)); 

     if(offDistance < 15) { 
      [deleteArray addObject:s]; 

      deaths++; 
      [deathLabel setString:[NSString stringWithFormat:@"Deaths: %ld", deaths]]; 
      if(deaths == 0) 
      [kdLabel setString:[NSString stringWithFormat:@"K/D ratio: %ld.00", score]]; 
      else 
       [kdLabel setString:[NSString stringWithFormat:@"K/D ratio: %.2f", ((float)score/(float)deaths)]]; 
     } 

     else { 
      adjustX = offX * .99; 
      adjustY = offY * .99; 

      CGPoint point = CGPointMake(player.position.x + adjustX, player.position.y + adjustY); 

      [s setPosition:point]; 
     }//else 

    }//for 

    for (CCSprite *target in deleteArray) { 

     [_targets removeObject:target]; 
     [self removeChild:target cleanup:YES];         
    } 
} 

changeTargetDest. 새로운 위치는 이전 오프셋의 99를 취함으로써 계산되기 때문에 대상이 플레이어에 가까울수록 이동 속도가 느려집니다. 속도를 일정하게 유지하려면 어떻게해야합니까?

답변

1

예약 된 방법으로 몇 프레임마다 작업을 중지하고 새 작업을 실행할 수 있습니다. 더 나은 방법은 플레이어 위치에 따라 대상 위치를 계산하고 setPosition을 사용하여 업데이트 방법에서 각 프레임의 위치를 ​​수동으로 변경하는 것입니다.

+0

정확합니다. 동작은 1 프레임 지연됩니다. 매 프레임마다 새로운 이동 액션을 생성하는 상황에 도달하면 스프라이트가 고정되어 움직이지 않습니다. – LearnCocos2D

+0

제 편집을 참조하십시오. 이 코드를 사용하면 스프라이트는 사용자가 말한 것과 정확히 일치합니다. 전혀 움직이지 않습니다. –

+0

코드에서 각 프레임은 동작을 실행하고 다른 동작을 중지합니다. 이렇게하면 스프라이트는 움직이지 않습니다. 동작은 한 프레임에 적합하지 않습니다. 움직입니다. 스프라이트를 각 프레임으로 이동하려면 설정 위치로 수동으로 위치를 설정해야합니다. , 각 프레임. –

관련 문제