伤害显示系统 - 利用游戏缓存 - 详细讲解(堕落版)
和老狼的方法不一样 - 我用游戏缓存写的- -希望对大家有所帮助
显示所有伤害 - 完美释放-
[attach]30334[/attach]
代码:
自定义脚本区:
function H2I takes handle h returns integer
return h
return 0
endfunction // ============此函数为将handle(句柄,除整数,实数,字符串等都是handle型)转为 integer
function I2T takes integer i returns trigger
return i
return null
endfunction // ============此函数为将integer(整数)转为trigger(触发)
初始化注册事件保存缓存:
function Trig_t_Actions takes nothing returns nothing
local unit u = GetTriggerUnit() // ============声明局部变量 u = 触发单位
call CreateTextTagUnitBJ( R2SW(GetEventDamage(),0,0), u, 0, 11.00, 100, 0.00, 0.00, 0 )
call SetTextTagVelocityBJ( GetLastCreatedTextTag(), 64, 90 )
call SetTextTagPermanent( GetLastCreatedTextTag(), false )
call SetTextTagLifespan( GetLastCreatedTextTag(), 3.00 )
call SetTextTagFadepoint( GetLastCreatedTextTag(), 2.60 ) //=====漂移文字设置 - -(可以用触发写好转化)
set u = nul l//========设置 u = 空(释放内存)
endfunction
function Trig_Init_Func005A takes nothing returns nothing
local unit u = GetEnumUnit() // ============声明局部变量 u = 选取的单位
local trigger t = CreateTrigger() // ============声明局部触发 t = 新建的触发器
call StoreInteger(udg_ceche,I2S(H2I(u)),"CF",H2I(t))
// ============以上这句 - 为为单位绑定触发 - H2I(变量名)这个为此单位唯一值
I2S - 为转化为字符串
call TriggerRegisterUnitEvent( t, u, EVENT_UNIT_DAMAGED )
// ============为触发t添加事件 u 接受伤害
call TriggerAddAction( t, function Trig_t_Actions )
// ============添加函数 t 中的动作 到 t触发
set u = null
// ============释放内存
endfunction
function Trig_Init_Actions takes nothing returns nothing
set udg_ceche = InitGameCache( "wow8" ) 设置ceche(全局) = 游戏缓存名字为:wow8
set bj_wantDestroyGroup=true // ============释放内存语句
call ForGroupBJ( GetUnitsInRectAll(GetPlayableMapRect()), function Trig_Init_Func005A )
// ========单位组选取地图中所有单位
endfunction
//===========================================================================
function InitTrig_Init takes nothing returns nothing
set gg_trg_Init = CreateTrigger( )
call TriggerAddAction( gg_trg_Init, function Trig_Init_Actions )
endfunction
随时注册事件:
function Trig_UnitDome_Actions takes nothing returns nothing
local unit u = GetTriggerUnit() // ============声明局部变量 u = 触发单位
local trigger t = CreateTrigger() // ============声明局部变量 t = 新建触发
call StoreInteger(udg_ceche,I2S(H2I(u)),"CF",H2I(t))
// ============以上这句 - 为为单位绑定触发 - H2I(变量名)这个为此单位唯一值
call TriggerRegisterUnitEvent( t, u, EVENT_UNIT_DAMAGED )
// ============为 t添加事件, u 接受伤害
call TriggerAddAction( t, function Trig_t_Actions )
// ============添加函数 t 中的动作 到 t触发
set u = null
// ============释放内存
endfunction
//===========================================================================
function InitTrig_UnitDome takes nothing returns nothing
set gg_trg_UnitDome = CreateTrigger( )
call TriggerRegisterEnterRectSimple( gg_trg_UnitDome, GetPlayableMapRect() )
call TriggerAddAction( gg_trg_UnitDome, function Trig_UnitDome_Actions )
endfunction
// ============为触发UnitDome添加事件单位进去地图可用区域
释放:
function Trig_UnitDeath_Actions takes nothing returns nothing
local unit u = GetTriggerUnit() // ============声明局部变量 u = 触发单位
local trigger t=I2T(GetStoredInteger(udg_ceche,I2S(H2I(u)),"CF"))
// ===========设置 局部变量 t = 转化integer为trigger ,读取缓存值 I2S(H2I(u)为此单位唯一值
call TriggerClearActions(t)
// ===========删除临时触发 t中的动作
call DestroyTrigger(t)
// ===========删除临时触发 t
call FlushStoredMission( udg_ceche,I2S(H2I(u)))
// ===========将u 所有缓存清除
set u = null
// =========== 释放语句
endfunction
//===========================================================================
function InitTrig_UnitDeath takes nothing returns nothing
set gg_trg_UnitDeath = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_UnitDeath, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddAction( gg_trg_UnitDeath, function Trig_UnitDeath_Actions )
endfunction
// ===========为触发UnitDeath添加事件单位死亡
详细的每一句就是这样了,有问题大家可以提问,当然可能有些解释不太准确 -
[[i] 本帖最后由 堕落圣童 于 2007-4-24 14:47 编辑 [/i]] 支持童哥:victory: 飘过- - 哎高手就是厉害 把代码贴出来吧 米看到代码。。~:o 终于传上来鸟~ 编辑好了 - - 详细讲解- heh 貌似用持续添加事件也可以捕做单位所受伤害.:) [quote]原帖由 [i]→冷[/i] 于 2007-4-24 14:54 发表 [url=http://bbs.wow8.org/redirect.php?goto=findpost&pid=278436&ptid=25107][img]http://bbs.wow8.org/images/common/back.gif[/img][/url]
貌似用持续添加事件也可以捕做单位所受伤害.:) [/quote]
这个不行额- 无法释放的 - - f回帖是一种美德,好帖要大家顶的 :lol 哟嚯~~~ 楼主,我想看下你的
InitGameCache()函数,我觉得可能有问题 没事了,仔细看了下,没问题的~ 不过,这个有泄漏哦
call TriggerClearActions(t)
问题出在这句上:]
这个函数并没有真正删除动作
你需要增加一个I2TriggerAction函数
用缓存保存下triggeraction
call SetInteger(udg_c[color=red]e[/color]che,I2S(H2I(u)),"CF",H2I( [color=royalblue]TriggerAddAction( t, function Trig_t_Actions )[/color] ))
最后用
TriggerRemoveAction()函数删除动作
我的黑暗舞者2里有很多这方面的函数,我也没有加密地图,希望对你有帮助:]
[url=http://bbs.wow8.org/viewthread.php?tid=24421]http://bbs.wow8.org/viewthread.php?tid=24421[/url]
最后...udg_c[color=red]e[/color]che...缓存的英文是cache:]
[[i] 本帖最后由 foolegg 于 2007-4-24 22:07 编辑 [/i]] 寒 - 原来还没释放完- -残念 - 学习中.... 请问- -
call SetInteger(udg_ceche,I2S(H2I(u)),"CF",H2I( TriggerAddAction( t, function Trig_t_Actions ) ))
写在哪- -
我写在添加动作后边会显示函数错误- - 用这行替换call TriggerAddAction( t, function Trig_t_Actions )嘛……
另外请不要直接copy,我直接打得,没有做过任何检查…………
而且"CF"这个也要改掉 利用单位死亡释放触发是不可取的
当死亡单位被复活时就会出问题 [quote]原帖由 [i]Red_Wolf[/i] 于 2007-4-25 13:22 发表 [url=http://bbs.wow8.org/redirect.php?goto=findpost&pid=279224&ptid=25107][img]http://bbs.wow8.org/images/common/back.gif[/img][/url]
利用单位死亡释放触发是不可取的
当死亡单位被复活时就会出问题 [/quote]
-0 - 用单位生命值小于0? 如果单位死亡就删除触发的话,那么当单位被复活后就不再有伤害显示绑定了
为了要使其复活后能重新绑定触发就需要为它注册个Life>0触发,显然这是浪费资源.不可取的
所以我一直都是在单位从游戏中移除后才释放触发的
[url]http://bbs.uuu9.com/viewthread.php?tid=606105[/url]
可以参考下 路过顶起 啊童 你不是说你不会JASS吗 怎么突然闹了这个????? 哈哈~~完全看不懂:lol 貌似很难懂 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~` 学习学习:(
好难的说 都素强人,看不懂,期待以T为主的,必要时使用自定义JASS语句。
估计这样看懂的人能多点。 写注释的不详细,因为我看不懂。 :rose :rose 好贴是要大家一起顶的!!
华丽而无痕地路过~~ 又没智利下了额 学习下喽 死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇...死草菇... 今天无聊翻帖完.
发现了这个对自己很有帮助的帖.
于是不顾一切的顶了!(葱头:30) 现在还不想接触J,害怕付出了却得不到。 貌似我实验时发现
英雄死亡复活后就没有伤害显示了 好像早有了啊 好东西。 再支持个
页:
[1]
2