2013-03-05 2 views
1

좋아, 내가 여기에 인공 지능을 몇 가지 시도하고 내가 레이 Wenderlich 자습서를 따라 왔습니다. 나는 이상한 행동이 계속되고있다. 어쩌면이 모든 일을 잘못하고 있을지도 모르지만 ... 여기 있습니다. 스프라이트가 목표의 75 픽셀 이내에있을 때 방어를 AIState으로 전환하고 나는 pauseSchedulerAndActions으로 전화를 걸어 getDefensePosition 방법을 통해 미리 지정된 안전한 지점으로 설정합니다. 내가하려고하는 것은 2 초 후에 액션을 다시 시작하여 스프라이트가 다시 돌아 다니도록하는 것입니다. 그래서 나는 resumeSchedulerAndActions라고 전화한다. 이제 이것은 단지 getDefenseMethod을 통과하고이 세 장소 사이에서 te sprite를 움직입니다. 그러나 이것은 이상한 동작입니다. getDefenseMethod 전에 두 개의 slog를 호출하고 하나는 스프라이트가 화면 중앙에서 점프하고 새로운 spawnPoint로 돌아 오는 것입니다. :resumeSchedulerAndActions를 사용할 때 주위에 점프하는 스프 라이트

2013-03-04 20:08:14.897 10-8[2629:c07] before: {217.533, 177.32} 
2013-03-04 20:08:14.898 10-8[2629:c07] spawnPoint 1 
2013-03-04 20:08:14.899 10-8[2629:c07] after: {100, 100} 

이유를 이해하지 못합니다. 왜 그 자리에서 시작하지 않는 것일까 요?

답변

2

FWIW, 플레이어 개체에 일부 CCMove 유형의 작업 (일시 중지 중임)이있는 것 같습니다. 일시 중지 된 상태에서 위치를 변경하더라도 작업이 다시 시작될 때 작업은 현재 상태 (startPosition, endPosition, duration, 시작 이후 경과 한 시간)로 위치를 설정합니다. 일시 중지 중에 설정 한 위치와는 상당히 다를 수 있습니다.

[player stopAllActions]; 
    player.position = spawnPoint; 
    [player runAction: [CCSequence actions: 
     [CCDelayTime actionWithDuration:2.0], 
     [CCMoveTo actionWithDuration:arc4random()%5+1 position: randomPoint], 
     [CCCallBlock actionWithBlock:^{ [self performSelector:@selector(moveRandom:) withObject:s afterDelay:0.5]; }], 
     nil] 
    ]; 

이 방법, 당신은 spawnPoint에서 실행됩니다의 moveTo 작업을 다시하고 player.position가 경합되지 않습니다 :이 같은 개체 모델/클래스 구조의 특정,하지만 뭔가하지

실행중인 행동으로 [CCSequence 조치 : [CCMoveTo actionWithDuration : arc4random() % 5 + 1 위치 : randomPoint, 를 메모리에서 서면, 당신의 마일리지가 그것은 내가 스프라이트가 [S runAction을 사용하여 무작위로 주위를 움직이고 있는가 :

+0

다를 수 있습니다 [CCCallBlock actionWithBlock :^{ [자기 performSelector : @ 선택기 (moveRandom :) withObject : s afterDelay : 0.5]; }], nil] ]; 그래서 내가 잘못된 방향으로 가고있는 것입니까? –

+0

편집을 참조하십시오. '예를 들어'라고 썼습니다. – YvesLeBorg

+0

감사합니다. 완벽하게 작동했습니다! 나는 계속해서 "선언되지 않은 식별자 'CCDelay'를 사용했다."그래서 나는 그 라인을 주석 처리했다. 나는 왜 그것을 얻었는지 모르지만, 내가 가져 오는 것을 잊어 버린 것이 있었습니까? –

관련 문제