2014-10-06 83 views
-1

我是SpriteKit的新品牌,我創建了一個遊戲,當用戶達到特定的分數增量時,我的屏幕上隨機CGPoint對象的位置。當我調用這個方法時,我希望我的對象可以選擇8個位置的位置,但是我的對象在選擇重複的位置並且彼此重疊時遇到問題。有沒有一種我可以調用的方法,可以防止我的對象在調用該方法時從plist中選取與另一個對象相同的位置?我想在整個遊戲過程中多次調用這種隨機化方法。隨機化對象的位置沒有重複或重疊

我寫了下面的代碼,但我的遊戲崩潰了。

- (NSMutableArray *)pickAndRemoveFromList:(NSMutableArray *)list { 

    list = [_objectList copy]; 

    NSInteger randomIndex = arc4random()%list.count; 
    Objects *object = [list objectAtIndex:randomIndex]; 

    [list addObject:object]; 
    [list removeObject:object]; 

    return list; 
} 
+0

我看到了你的建議的文章「創建主陣列的本地副本mutablearray這個答案,並獲得隨機值後,取出可用的對象從本地數組中隨機索引,處理它,直到數組數爲1。「.....你會碰巧知道我可以如何創建這個編程? – Newbie 2014-10-06 01:44:17

+0

我用你建議的方法編寫了上面的代碼。 – Newbie 2014-10-06 02:11:37

回答

1

你的方法有幾個問題。首先,你傳入一個名爲list的可變數組,但是在方法的第一行中,你重新定義了列表。你不應該先通過列表,否則你不應該重新定義它。其次,如果_objectList是不可變數組,則需要使用mutableCopy使其成爲可變數組,而不是複製。第三,不需要將對象添加到列表中,然後在下一行中轉向並將其刪除。另外一個更好的隨機數函數是arc4random_uniform()。所以,如果你傳遞一個可變數組,你的方法應該是,

- (NSMutableArray *)pickAndRemoveFromList:(NSMutableArray *)list { 

    NSInteger randomIndex = arc4random_uniform((int)list.count); 
    Objects *object = [list objectAtIndex:randomIndex]; 
    [list removeObject:object]; 
    return list; 
} 
+0

我寫了你的建議代碼,並在我的更新方法中調用它,但沒有發生任何事情。我從 - (NSMutableArray *)pickAndRemoveFromList方法的初始定義中取出「list NSMutableArray」,並在方法中將其重新定義爲我的全局_objectlist的副本。我有另一個在整個遊戲畫面中移動的對象,所以我在我的更新方法中寫了這個if語句,「if(moving object.position.x> 50){[self - (NSMutableArray *)pickAndRemoveFromList]」但什麼都沒有發生。 – Newbie 2014-10-06 04:52:19

+0

這裏是我編寫的代碼' - (NSMutableArray *)pickAndRemoveFromList {NS_MobjectArray * list = [_objectList copy]; NSInteger randomIndex = arc4random_uniform((int)list.count); Objects * object = [list objectAtIndex:randomIndex]; [list removeObject:object]; 返回列表;' – Newbie 2014-10-06 04:53:26