わかりました、ここでいくつかの AI を試しています。Ray Wenderlich のチュートリアルに従っています。私はいくつかの奇妙な行動が続いています。たぶん、私はこれをすべて間違ってやっているだけです...しかし、どうぞ。スプライトがターゲットの 75 ピクセル以内にある場合、スプライトは防御側に切り替わり、メソッドを介してAIState
呼び出しpauseSchedulerAndActions
て、所定の安全な場所に設定します。getDefensePosition
私がやろうとしているのは、2秒後にアクションを再開して、スプライトが再び動き回るようにすることです。だから私は電話しますresumeSchedulerAndActions
。今、これはただ通過し、getDefenseMethod
これらの 3 つの場所の間でスプライトを移動しますが、これは奇妙な動作ですgetDefenseMethod
。スプライトが画面の中心から飛び回り、新しい spawnPoint に戻る前と後に 2 つの slog 呼び出しがあります。
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}
なぜそれをしているのか理解できません。元の位置からスタートしないのはなぜですか?
- (void)execute:(GangMembers *)player {
// Check if should change state
NSArray * enemies = [player.layer enemiesOutsideRange:75 ofPlayer:player];
if (enemies.count > 0) {
NSLog(@"outside range 75");
[player changeState:[[Attacking alloc] init]];
return;
}
[player.layer setPlayer:player attacking:NO];
// Make build decision
[player.layer unschedule:@selector(shoot:)];
[player pauseSchedulerAndActions];
NSLog(@"before: %@", NSStringFromCGPoint(player.position));
[self getDefensePosition];
player.position = spawnPoint;
NSLog(@"after: %@", NSStringFromCGPoint(player.position));
[player performSelector:@selector(resumeSchedulerAndActions) withObject:player afterDelay:2];
}
- (void)getDefensePosition {
// CGSize winSize = [CCDirector sharedDirector].winSize;
int spawnChoice = arc4random() % 3;
spawnPoint = ccp(100, 100);
if(spawnChoice == 0){
spawnPoint = ccp(100, 100);
NSLog(@"spawnPoint 1");
}
else if(spawnChoice == 1){
spawnPoint = ccp(100, 200);
NSLog(@"spawnPoint 2");
}
else {
spawnPoint = ccp(100, 300);
NSLog(@"spawnPoint 3");
}
}