我目前正在爲我的對象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
那麼它不僅僅意味着一個不存在的對象的方法。它也可能是一個存在的對象的方法,但該方法或者不存在,或者沒有在頭中聲明,所以消息(發送者)類不知道它。 –