作者larchrono (拉可羅洛)
看板WarCraft
標題Re: [WE ]請教一下,我這樣寫對改善記憶體漏失有幫 …
時間Sat Mar 8 00:26:29 2008
我不知道DestroyTrigger(GetTriggeringTrigger())以後
TempTrigger[T_ID]還能不能用= =
無法回答 orz
-------------
如果是我的話我用區域變數,雖然方法不一樣,但效果一樣
機機毛毛的GUI+JASS
Larchrono的關懷:跑一次就創新觸發,剛創的觸發跑完後會自己砍自己掉
●用Custom script插進去
local trigger loctrigger=CreateTrigger()
XXXX.....
XXXX.....
XXXX.....
call TriggerRegisterUnitEvent(loctrigger,GetLastCreatedUnit(),
→
→→ EVENT_UNIT_DEATH )
call TriggerAddAction(loctrigger,function
※Trig_***_Func00#A ←名子不一定 要找)
●給loctrigger用的function,故意設條件不符合不讓他跑
部隊群組 - Pick every unit in (Units in (
自己畫個小區域) matching (假 等於 真)
→→ and do (Actions)
迴一行動
※
部隊死亡觸發裡你要的行動....
XXXX.......
XXXX.......
觸發 - Run trigggg[
(Player number of (Owner of (Triggering unit)))]
→→ (ignoring conditions)
●見下文
Custom script: call DestroyTrigger(GetTriggeringTrigger())
最後
編輯→轉換為自訂文字
找一下
※這個function的名子,通常都叫做Trig_
***_Func00
#A
*** 是現在全部這一大條這觸發的名子
# 不一定,動作數目多寡會影響這數字
找到以後複製名子,編輯→復原觸發轉換
貼到剛剛說要找的紅色文字
PS:以後若這一整條觸發有修改,
#會有更動,要再重找一次
: ==============================================
: 另外之前我看到新增event也會增加記憶體負擔,只能將整個觸發砍了才會刪掉事件。
: 那麼我這樣寫可以改善嗎?
: --------//使用觸發陣列變數來增加只執行一次的事件。
: 設定 TempTigger[T_ID] = TempTiggerS
: 觸發 - 於(TempTigger[T_ID])增加事件:(部隊 - (最後創造的部隊) 死亡)
: 設定 T_ID = T_ID + 1
: -------//並在該觸發的開頭加上call DestroyTrigger(GetTriggeringTrigger())
: 觸發 TempTiggerS
: 事件
: 條件
: 動作
: 自訂腳本:call DestroyTrigger(GetTriggeringTrigger())
: ---------------------
: 這樣寫的話有用嗎? 另外,這樣的話,在該觸發被執行後,因為
: call DestroyTrigger(GetTriggeringTrigger())而被刪掉的
: 觸發變數TempTigger[T_ID]那個值是變為空(null)嗎?有沒有辦法判斷?
: 另外一個問題,有沒有辦法取得觸發變數陣列在執行時的索引值?
: 舉例來說,我希望觸發TempTigger[5]在執行的時候能抓到它的索引值也就是5,
: 然後指定給TempTiggerEmpty[5] = true
: 這樣就可以用迴圈來跑看那一個索引位置已經被執行過也被移除空了出來以便重新指定
: 新的觸發與事件。
: 另外,解答這個問題在解決不同的玩家在執行事件-遊戲時間經過或事件-計時器歸零
: 時抓取玩家編號也有作用。
●這樣效果應該一樣吧,抓觸發單位的玩家的編號,跑編號的觸發
: 例如:玩家3的英雄死亡後,開啟記時器3的倒數,
: 並增加事件-記時器3時間歸零 到 觸發 玩家復活[3]
: 這樣就可以玩家復活那個觸發中根據抓到的陣列索引值來復活相應玩家的英雄了
--
黃XD全部重製了
跟
D@三國貳,
FalconEX三國‧論劍,站在一樣的立場
學WE是用來保護世界和平的
http://www.wretch.cc/blog/larchrono
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.165.135.236
推 ilsummerya:推XD 03/08 00:30
推 wix3000:呿,你把黃XD全部重製了嗎,這樣的話我就不追究了 03/08 00:31
→ wix3000:我期待著你用WE保護世界和平的那一天 03/08 00:32
推 slycsboy:\._ . 戳戳 你有啥資格追究? 03/08 00:41
推 wix3000:憑我是一個有自立思考能力的有機碳源生命體 03/08 00:44
推 slycsboy:請問狗可以追究閣下何德何能活在這個世界上嗎? 03/08 00:53
推 gonzdevour:酷,原來觸發註冊是這樣用的。 03/08 00:59
→ gonzdevour:我可以請教原po的JASS是怎麼學的嗎? 03/08 01:00
→ larchrono:我在盜圖的過程中學到了很多很多的東西 03/08 01:18
推 wix3000:可以,只要他有辦法表達 03/08 01:23
→ wix3000:我倒是比較好奇閣下有沒有資格呢,呵呵呵 03/08 01:23
推 vinxu:感謝指教,不過,我原來是不想用jass搞才提出觸發陣列的想法 03/08 01:26
→ vinxu:不過還是很感謝你啦 囧.... 03/08 01:27
→ vinxu:另外,如果要加的事件是幾秒之後執行,並將玩家編號傳給該 03/08 01:28
→ vinxu:觸發,以利該觸發使用,這樣又要如何寫呢? 03/08 01:30
→ vinxu:因為幾秒之後執行這個事件好像無法抓到觸發玩家.... 03/08 01:30
→ readper:模仿是學習的開始 本來就是這樣 我也從OS學了很多東西 03/08 01:29
→ readper:V大你要的東西用區域變數做吧 03/08 01:31
→ vinxu:不能用區域變數傳遞吧?已經是不同的觸發了。 03/08 01:32
推 jesil:專業 03/08 01:33
→ vinxu:我的意思是,在觸發A,把時間事件加到觸發B,順便把觸發A的 03/08 01:33
→ readper:區域變數傳過wait後 轉成全域 傳過觸發 03/08 01:33
→ vinxu:觸發玩家編號傳遞到觸發B去,讓B也可以使用到。 03/08 01:34
→ vinxu:用wait只有用在跑一次的事件,那如果是每x秒執行的事件呢? 03/08 01:35
→ vinxu:如果用全域變數傳的話,兩個玩家都觸發的話該變數又會被蓋掉 03/08 01:37
推 readper:說實話 弄這麼麻煩沒好處 一個玩家一條比較省事 也好維護 03/08 01:36
推 vinxu:也只好這樣了 囧,模組化失敗 03/08 01:39
推 readper:傳資料進timer其實是可行 但是要用所謂的jass return bug 03/08 01:42
→ readper:那樣做下去基本上就是全JASS寫了 要用GUI應該是不太可能 03/08 01:43
推 gonzdevour:我覺得可以先討論看看v兄要做的效果是什麼, 03/08 01:50
→ gonzdevour:很多東西不見得要用複雜的方法做。 03/08 01:50
推 readper:用迴圈去比對GetTriggeringTrigger()跟TempTrigger[] ? 03/08 01:58
→ readper:剛剛發現問題點不是要傳資料 只是要取得index 03/08 01:59
推 peacehank:推模仿是學習的開始這句話 03/08 02:36
→ peacehank:讓我想到我統計老師@@ 03/08 02:36
→ gonia119:larch比較謙遜,wix態度讓人看了真的不蘇湖 03/08 04:04
推 dRick:追究.... 好像別人欠你一樣.... "東吳可消事件"嗆聲也沒道歉 03/08 07:13
推 wix3000:東吳可消? 我只說了"不是有時間的都是召喚部隊"吧 03/08 07:37
→ marsantony:面子問題 從以前到現在都是這樣= =拿得起 放不下 03/08 08:52
推 narotic: 面子問題 從以前到現在都是這樣= =拿得起 放不下 03/08 09:43
推 wix3000:這種話麻煩你們對鏡子講 03/08 13:51