0

所以我的问题只有在我的游戏中有两个敌人时才会发生。如果是一对一的..我不明白这个问题。

请查看我的代码,看看您是否可以收集到为什么我会收到这个致命错误。

从玩家目标数组中移除目标

-(void)removeTarget:(PlayerClass *)target withSender:(PlayerClass *)sender {
    if ([sender.targets containsObject:target]) {
        [sender.targets removeObject:target];
    }
}

将目标添加到玩家目标数组

-(void)addTarget:(PlayerClass *)target withSender:(PlayerClass *)sender {

    //check if target already exists

    if ([sender.targets count] > 0) {
        for (PlayerClass *players in sender.targets) {
            if ([players.name isEqualToString:target.name]) {
                //Checked if exists, if target exists in list then move on.
                goto outer;
            }
        }
    }

    [sender.targets addObject:target];

    outer:;
}

在更新中确定它们是否是目标

-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */

for (PlayerClass *player in _players) {
    ....

    if (player.health > 0) { //If player is alive!

       ....
        //Checks if the player has targets, if so & visible - Engage.
        if ([player.targets count] > 0) {
            for (PlayerClass *enemy in player.targets) {
                if (![player.team isEqualToString:enemy.team]) {
                    if (enemy.health > 0) {
                        if ([self lineOfSightBetweenPlayers:player andPlayer:enemy]) {
                            [self attackWithPlayer:player againstPlayer:enemy];
                            break;
                        } else {
                            [player removeTarget:enemy withSender:player];
                        }
                    } else {
                        [player removeTarget:enemy withSender:player];
                    }
                } else {
                    [player removeTarget:enemy withSender:player];
                }
            }
        }


    }

现在从调试中我收集到玩家不会将他们的队友添加为目标。但是,如果玩家可以看到对方队伍中的多个目标,他们将收集多个目标。但是,我猜测的问题在于我从阵列中删除目标的技术?任何人都可以检查并确保我没有在这里传递男生错误吗?

提前致谢。

4

1 回答 1

0

非常简单的修复。没有跳出框框思考......当代码开始变得非常大时往往会发生这种情况!

        //Checks if the player has targets, if so & visible - Engage.
        if ([player.targets count] > 0) {
            for (PlayerClass *enemy in player.targets) {
                if (![player.team isEqualToString:enemy.team]) {
                    if (enemy.health > 0) {
                        if ([self lineOfSightBetweenPlayers:player andPlayer:enemy]) {
                            [self attackWithPlayer:player againstPlayer:enemy];
                            break;
                        } else {
                            [player removeTarget:enemy withSender:player];
                            break;
                        }
                    } else {
                        [player removeTarget:enemy withSender:player];
                        break;
                    }
                } else {
                    [player removeTarget:enemy withSender:player];
                    break;
                }
            }
        }

解决了我的问题,我没有爆发。因此在删除后进行枚举。

于 2016-09-26T13:19:35.630 回答