引用 | 編輯
ccw111
2012-04-23 22:46 |
樓主
▼ |
||
x1
感謝#2的ChaosX更正我的一些錯誤本次教學會使用<amxmodx>的function get_user_origin 一般情況下我們都只會用1D Array 用法和下方差不多 new point[33] point[id] ++ //玩家的點數增加 但這種方法只能保存一種數據,保存的是不同玩家的點數(一種數據,大概就是1D的定義) 在其他情況下要保存多種不同數據的情況下使用1D Array就會增加了很多不必要的步驟 例子如下: 假如我要使用變數保存玩家的技能點數,金錢和經驗值 用1D Array會這樣做 new playerxp[33] new playersp[33] new money[33] ......... ........... public xyz(id) { money[id] = cs_get_user_money(id) playerexp[id] = get_exp((id) // 假設我有這個function playersp[id] = get_sp(id) //同上 } 要宣告的事物會更多 但使用2D Array 可以省下不少工夫 例子如下: #define xp 0 //主要是為了令自己不用記住格子編號 #define sp 1 #define usd 2 // 這3個定義是不必要做的 new playerinfo[33][3] // 使用二維數組(2D Array) 這裡要感謝ChaosX大的更正 ............... ....... pulic xxxxx(id) { playerinfo[id][usd] = cs_get_user_money(id) playerinfo[id][xp] = get_xp(id) playerinfo[id][sp] = get_sp(id) } 使用2D Array有以下好處 1) 節省工夫子 2) 不用記住眾多變數名 以上例子雖然未必體現到1D Array與2D Array的分別,但可以見到2D Array能儲存不同數據的功效 但我可以舉一個例子,不使用2D Array會體驗到的事情 如 1)儲存玩家的位置 如果使用1D Array 情況會是: new origin[3] new playerorigin1[33] new playerorigin2[33] new playerorigin3[33] ......... ............ public xxxx(id) { get_user_origin(id, origin, 0) /* 當我要儲存玩家的位置 */ playerorigin1[id] = origin[1] playerorigin2[id] = origin[2] playerorigin3[id] = origin[3] } 使用2D Array時. new playerorigin[33][3] ....... ........ public XXX(id) { get_user_origin(id, playerorigin[id], 0) //完全不需要定義不同的變數 } x0
|
引用 | 編輯
ChaosX
2012-04-24 01:29 |
1樓
▲ ▼ |
教得很好
不過有點問題 playerinfo[33][4] 是33*4 其中前面的[33] 是玩家的ID 也就是1個玩家1個位置 後面的[4]是4個格子 代號是從0~3 不過你的例子只用了3個格子 4個格子只用了1~3(第2格到第4格) 這樣不太合理 而且浪費了0那格的記憶體空間 所以你可以像下面這樣寫 #define xp 0 #define sp 1 #define usd 2 new playerinfo[33][3] // 使用二維數組(2D Array) ............... ....... public xxxxx(id) { playerinfo[id][usd] = cs_get_user_money(id) playerinfo[id][xp] = get_xp(id) playerinfo[id][sp] = get_sp(id) } 若沒有定義xp sp usd 就要改成 public xxxxx(id) { playerinfo[id][0] = cs_get_user_money(id) playerinfo[id][1] = get_xp(id) playerinfo[id][2] = get_sp(id) } x1 |