我的Sprite AI工作不正常。为什么?

时间:2014-04-14 01:27:50

标签: ios objective-c cocos2d-iphone nsdictionary tmx

我希望我的两个敌人能够设置为攻击模式,但是因为只有最后添加的敌人才会被设置为攻击模式。

这有什么办法吗?任何提示或建议表示赞赏。如果您需要更多代码,请告诉我。

  -(void)ViewDidLoad {
  for (_enemyPoint in [self.enemyGroup objects]) {
  self.enemy = [[CCSprite alloc] initWithFile:@"Icon.png"];
  self.enemy.scale = 32.0f/57.0f;
  self.enemy.position = CGPointMake([_enemyPoint[@"x"] integerValue],    [_enemyPoint[@"y"] integerValue]);
  [self addChild:self.enemy];
    }
  self.pathfinder = [HUMAStarPathfinder pathfinderWithTileMapSize:self.tileMap.mapSize
                                                         tileSize:self.tileMap.tileSize
                                                           delegate:self];
    [self enemyAttack];

                    }


  - (void)enemyAttack{

self.epath = [self.pathfinder findPathFromStart:self.enemy.position
                                          toTarget:self.player.position];
self.eactions = [NSMutableArray array];


for (_epointValueInPath in self.epath) {
   self.epoint = _epointValueInPath.CGPointValue;

   self.emoveTo = [CCMoveTo actionWithDuration:1.0f position:self.epoint];
    [self.eactions addObject:self.emoveTo];

}

self.esequence = [CCSequence actionWithArray:self.eactions];
[self.enemy runAction:self.esequence];
  }

2 个答案:

答案 0 :(得分:0)

viewDidLoad中查看您的循环。首先,使用iVar作为循环变量。可能不是你想要的。其次,在每次迭代中分配self.enemy,但在循环完成后调用enemyAttack

此外,enemyAttack不接受任何参数,因此它使用内部状态。由于在循环遍历所有对象之后调用它,self.enemy将始终是集合中的最后一个对象(如果集合中有任何内容)。

因此,您只看到最后一项被激活为敌人并不奇怪。

答案 1 :(得分:0)

您是否尝试将[self enemyAttack];调用放在for循环中?