2016-12-15 81 views
0

當我嘗試爲我的所有目標使用ds列表時,出現我的代碼問題。它似乎不會註冊一個東西,我不知道我做錯了什麼,我已經嘗試了我所知道的一切。當我顯示ds列表的值時,它始終爲0,即使我列入列表的衝突ID也有值。碰撞標識默認值爲-4,因爲某些原因它不與任何東西碰撞。ds_list在遊戲製作工作室中工作不正常

這是將值分配給ds列表的代碼。

//get all enemys in area 
current_coli = collision_circle(x, y, tower_range, obj_enemys, 0, 1); 
if (current_coli != noone){ 
    ds_list_add(collision_list, current_coli); 
} 

這裏是我試圖在巫婆什麼都不用的ds列表中的代碼。

var i 
for (i = 0; i < ds_list_size(collision_list) + 1; i++){ 
    target_test = ds_list_find_value(collision_list, i); 
if (instance_exists(target_test) and (rectangle_in_circle(target_test.x - 7, target_test.y - 7, target_test.x + 7, target_test.y + 7, x, y, tower_range) > 0)) 
    { 
     target = ds_list_find_value(collision_list, i); 
     target.show_hp_bar = true; 
     target.path_speed = target.path_speed * ((100 - slow)/100) 
     show_debug_message(other.target); 
    }else{ 
     target.path_speed = target.start_speed; 
     ds_list_delete(collision_list, i); 
    } 
} 

由於ds列表中不包含任何內容,我無法執行該代碼。正如我之前所說的,「current_coli」給出了對象的id,但由於某種原因它不會將它存儲到ds列表中,「target_test」總是未識別的,ds列表「collision_list」始終是0.代碼是在對象階躍事件中,在地圖上有一個固定位置,並將該效果應用於碰撞半徑內的敵方物體。

回答

0

這是錯誤的:

//get all enemys in area 
current_coli = collision_circle(x, y, tower_range, obj_enemys, 0, 1); 
if (current_coli != noone){ 
    ds_list_add(collision_list, current_coli); 
} 

collision_circle只返回一個(至少)ID,並不是所有的ID。你可以做這樣的:

with obj_enemys 
{ 
    if point_distance(x, y, other.x, other.y) < other.tower_range 
    { 
     ds_list_add(other.collision_list, id); 
    } 
} 

而且

var i 
for (i = 0; i < ds_list_size(collision_list) + 1; i++) 

也是錯誤的。右:

for (var i=0; i<ds_list_size(collision_list); i++) 
  1. 你可以寫varfor

  2. 你不需要+1

還有一件事。當你做

ds_list_delete(collision_list, i); 

它改變數據並打破你的for循環。例如,您可以在刪除後減少i

ds_list_delete(collision_list, i); 
i--; 

或在一行同

ds_list_delete(collision_list, i--); 
+0

感謝您的迴應! 我明白,我正在考慮用obj {}做,但我認爲這沒有任何區別。我也認爲把它放在for循環中可能是錯誤的,但我沒有太多的for循環經驗,所以我不知道。 無論如何感謝您的幫助生病立即嘗試它! –

+0

好了,現在可以使用了,但現在又出現了另一個問題,for循環顯着減慢了遊戲速度,它非常明顯,所以你有沒有其他的想法可能不會在CPU上造成如此沉重的負擔? –

+0

nvm解決了這個問題,這是因爲它增加了相同的物體時刻,使得for循環變得越來越大,只要有些東西在半徑內。 –