精華區beta WarCraft 關於我們 聯絡資訊
之前看許多人的寫法,一般都是在點或群組使用之後再刪點。 我改成在每次使用點或群組之前刪點或群組,這樣寫對改善記憶體漏失有幫助嗎? 自訂腳本:call RemoveLocation(udg_Temp_Point) 設定 Temp_Point = (Temp_Unit 之位置) 自訂腳本:call DestroyGroup(udg_Temp_group) 設定 Temp_group = (半徑 600.00 於Temp_Point 內之部隊,比對條件:(比對部隊為存 活) 等於 真) ============================================== 另外之前我看到新增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]    這樣就可以玩家復活那個觸發中根據抓到的陣列索引值來復活相應玩家的英雄了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.127.92.170
thisgo:我還以為我走到Programming版了XDD 03/07 14:51
blackjack0s:這樣就好像沒吃飯前先清掉下的飯粒...= = 03/07 15:13
vinxu:其實我比較想問的是後面那個觸法陣列的問題。 03/07 16:30
HypocritePro:計時器我記得設陣列似乎無效耶 用一般的觸發編輯的話 03/07 17:06
readper:應該有用吧 但是一定要設定正確的大小 因為需要初始化 03/07 17:13
blackjack0s:= =? 印象中無論設多少都是一樣大小 (數字忘了) 03/07 17:15
HypocritePro:請問到底該怎麼讓計時器成功的設陣列? 03/07 21:40
HypocritePro:能用的話寫很多觸發可以省不少力氣 教我~~ 03/07 21:40
readper:我都用jass在寫東西的 -.- 幫不上忙 03/07 21:58
Ctrl+B,新建一個變數Timer,並設定為計時器、陣列打勾、大小設定為8(玩家數量) 之後要用的話,就用 開始計時器Timer[PlayerID],單次,N秒。 事件增加-觸發XXX,增加事件計時器Timer[PlayerID]歸零 ,這樣應該就可以了。 問題就在於那個觸發XXX在事件發生時,怎樣才能抓到PlayerID,也就是當時發生事件 計時器歸零的陣列索引。這個還是沒人解答呀 囧 ※ 編輯: vinxu 來自: 59.127.92.170 (03/07 22:13)
gonzdevour:抓不到。一定要timer就乖乖寫八條。 03/07 23:10
gonzdevour:取巧可以用回血-1的單位。 03/07 23:17
HypocritePro:感謝g大 vinxu的方法很正統我也是這樣寫的 但我發現 03/08 07:36
HypocritePro:Timer陣列似乎抓不到 如果有抓得到的地圖樣本請一定 03/08 07:38
HypocritePro:要給我看看 03/08 07:39
vinxu:找到解決辦法了,看#17qldDIc那篇吧。 03/09 05:02
> -------------------------------------------------------------------------- < 作者: 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