我目前正在为我的对象BuildingNode *塔设计一个解决方案,该解决方案被放置在NSMutableArray * gameObjects内部,攻击EnemyNode *敌对对象,同时也保存在gameObjects数组中。需要帮助NSMutableArray解决方案
我有一个建议的解决方案,偶尔会导致我的游戏冻结(暂时),因为所采用的解决方案非常麻烦。
我的解决方案是,每个塔对象都包含自己的NSMutableArray *目标,它是从Tower类合成的。如果一个敌人进入了任何给定的塔状物体的射程或超出范围,来自gameObjects数组的敌方物体的相应索引被保存为一个NSNumber到目标数组中,或者如果敌方物体超出范围,它将从.targets数组中移除。
基本上这个想法是,目标阵列拥有在塔范围内的任何敌人的指数。
我似乎面临的问题是,因为这个tower.targets数组始终是动态更新的,我相信如果我正在做一些特定索引的tower.targets然后被删除,我得到这个错误:
-[BuildingNode distance]: unrecognized selector sent to instance 0x2dd140
每个BuildingNode *塔有使用tower.targets阵列回调到分拣/所需敌人攻击不同算法的。例如,一个随机的攻击风格会随机化一个介于0 [0]到[0]之间的数字[tower.targets count],然后我可以用相应的[tower.targets intValue]创建一个指向gameObjects的指针。 事情是这样的:
EnemyNode *enemy = (EnemyNode *)[gameObjects objectAtIndex:[[tower.targets objectAtIndex:rand]intValue]];
因此,这将潜在.targets阵列找到一个随机的敌人,然后创建一个指向对象的敌人。
我已经放入很多if语句来确保在.targets索引被中途排序的情况下,操作不应该继续,从而消除游戏失败率,但它偶尔会偶尔发生。
继承人我的代码:
请注意BuildingNode *塔== BuildingNode *构建。
这只是gameObjects中迭代的一个片段。
//Potential Enemies (Indices) Add and Delete/
if (enemy.distance < build.atk_distance && !enemy.isExploding){
NSNumber *index = [NSNumber numberWithInt:[array indexOfObject:enemy]];
if(![build.targets containsObject:index]){
[build.targets addObject:index];
}
}
else {
NSNumber *index = [NSNumber numberWithInt:[array indexOfObject:enemy]];
if ([build.targets containsObject:index]){
[build.targets removeObject:index];
}
}
}
//瞄准//最近算法。 //会发现最近的敌人的建筑
if (enemy.distance < build.atk_distance){
if (!build.isAttacking || build.atk_id == 0){
if ([build.targets count]){
if ([build.atk_style isEqualToString:@"near"]){
int l_dist;
for (int i = 0; i < [build.targets count]; i++){
//Grab the Enemy from Targets
if ([build.targets objectAtIndex:i]){
if([array objectAtIndex:[[build.targets objectAtIndex:i]intValue]]){
EnemyNode *temp = [array objectAtIndex:[[build.targets objectAtIndex:i]intValue]];
if (temp){
int c_dist = temp.distance;
if (!l_dist || c_dist < l_dist){
l_dist = c_dist;
build.atk_id = temp.uniqueID;
build.isAttacking = YES;
}
}
}
}
}
}
}}
Hrm,我正在使用isKindOfClass:[EnemyNode类],而不是isMemberOfClass,用于迭代gameObjects。但林不确定这是否是问题,isKindOfClass只会选择自己和子类。我会看看现在会发生什么,谢谢。 – Ospho
那么它不仅仅意味着一个不存在的对象的方法。它也可能是一个存在的对象的方法,但该方法或者不存在,或者没有在头中声明,所以消息(发送者)类不知道它。 –