找回密码
 点一下
查看: 2018|回复: 23

关于实数变量事件的数组使用

[复制链接]
发表于 2009-1-31 20:08:33 | 显示全部楼层 |阅读模式
实数变量事件不能使用数组么?
难道必须要使用J么?

头痛……
发表于 2009-1-31 20:29:15 | 显示全部楼层
不能,即使是J也不行......硬要用的话就loop添加事件吧.......
回复

使用道具 举报

发表于 2009-1-31 20:39:00 | 显示全部楼层
谁的马甲?不错啊!很强大!
回复

使用道具 举报

发表于 2009-1-31 20:40:22 | 显示全部楼层
添加事件也无法用数组………………
回复

使用道具 举报

发表于 2009-1-31 21:24:38 | 显示全部楼层
无解了,用计时器捕捉吧- -
回复

使用道具 举报

发表于 2009-1-31 22:06:33 | 显示全部楼层
既然是一个事件,就把他独立开来。
回复

使用道具 举报

发表于 2009-1-31 22:10:08 | 显示全部楼层
问题是根本无法捕捉数组中的成员的变化事件
回复

使用道具 举报

发表于 2009-1-31 22:13:09 | 显示全部楼层
如果不怕麻烦就一个一个做。。。(前提是没那么麻烦)
回复

使用道具 举报

 楼主| 发表于 2009-1-31 22:29:22 | 显示全部楼层
那么如果使用多个变量,变化的变量是哪个怎么判断呢?
回复

使用道具 举报

发表于 2009-1-31 22:31:24 | 显示全部楼层
如果这样想下去会想出死循环。。。
回复

使用道具 举报

发表于 2009-1-31 22:53:47 | 显示全部楼层
多做几个触发,不同的变量对应不同的触发………………
回复

使用道具 举报

 楼主| 发表于 2009-1-31 22:56:48 | 显示全部楼层
最笨的办法?
考虑一下
回复

使用道具 举报

发表于 2009-1-31 23:23:22 | 显示全部楼层
引用第3楼zhuzeitou于2009-01-31 20:40发表的  :
添加事件也无法用数组………………

没,我的意思是loop给触发添加事件........至于怎么判断是哪个数据发生了变化,那就只能在数据上做点手脚了,比如说最后(或最前)四位写成数组下标之类的。
回复

使用道具 举报

发表于 2009-2-1 00:16:35 | 显示全部楼层
引用第12楼louter于2009-01-31 23:23发表的  :


没,我的意思是loop给触发添加事件........至于怎么判断是哪个数据发生了变化,那就只能在数据上做点手脚了,比如说最后(或最前)四位写成数组下标之类的。

如果你用的是数组的话,即使用触发添加事件也时无法做到的
回复

使用道具 举报

发表于 2009-2-1 00:40:38 | 显示全部楼层
诚然,因为是string所以不会允许有数组,但是如果想要模拟的话也不是不可以。比如,设一全局变量r,在需要数组变动的语句后加一句Set udg_r = 数组下标,可以得到同样效果。
回复

使用道具 举报

 楼主| 发表于 2009-2-1 08:49:29 | 显示全部楼层
LS的方法没有什么意义
因为是多个实数同时变化的
除非在改变实数的触发里判断实数是不是等于你需要响应的事件的值再设置全局变量r
但是这样的话我还不如直接运行触发呢
少量使用的话我还是有办法的
用马甲的生命值替代吧
用生命值变化事件响应
用自定义值的正负来决定正负
自定义值来决定数组下标
只是添加太多单位的话会使地图很卡
而且数值的计算和变化也没有设置实数值方便
回复

使用道具 举报

发表于 2009-2-1 10:51:45 | 显示全部楼层
。。。用“逝去的时间”?
回复

使用道具 举报

发表于 2009-2-1 13:26:54 | 显示全部楼层
所以需要Set udg_r = 数组下标 啊.......起码只需要注册一个值就可以完成,而且能够判断是哪个数据发生了变化。多个数据同时发生变化也不是真正意义上的“同时”吧?应该不会有全局变量错乱的情况。

不知道是lss没理解我的意思还是我没理解lss的意思。
回复

使用道具 举报

 楼主| 发表于 2009-2-1 19:22:33 | 显示全部楼层
应该是你没有看懂我的吧
我们举个例子
如果我们需要控制的是两个实数变量a1,a2
当它们=0时触发
当事件触发时我们需要判断r=1或者还是2
那么r=几呢?
因为a1,a2都是在变化的
所以你在a1或者a2变化的触发加上当其值为0时设置r=相应的数
这应才行
如果你的方法不是这样
那么请说
回复

使用道具 举报

发表于 2009-2-1 20:43:50 | 显示全部楼层
嗯,既然a1,a2是全局变量,那么当我们修改它们的值也是需要set udg_a1= xx 吧? 这时在之后再加一句 set udg_r = 1, 触发T。按照你的说法,我们不妨可以这样写:
[jass]
globals
    real udg_r = 0.00
    real array udg_ra
endglobals

function Test_VarChange takes real ra, real rb, integer i returns real
    if ra != rb then
        return I2R(i)
    endif
    return 0.00
endfunction

function Test takes real r returns nothing
    local real rab

    set rab = udg_ra[1]
    set udg_ra[1] = r

    set udg_r = Test_VarChange(udg_ra[1],rab,1)

    set rab = udg_ra[2]
    set udg_ra[2] = r

    set udg_r = Test_VarChange(udg_ra[2],rab,2)
endfunction

function Test_Func takes nothing returns boolean
    call BJDebugMsg("当前改变的实数为: udg_ra["+I2S(R2I(udg_r))+"]       它的值为: "+R2S(udg_ra[R2I(udg_r)]))
    set udg_r = 0.00
    return false
endfunction

function Init takes nothing returns nothing
    local trigger trg = CreateTrigger()
    call TriggerAddCondition(trg,Condition(function Test_Func))
    call TriggerRegisterVariableEvent(trg,"udg_r",NOT_EQUAL,0.00)
    set trg = null
endfunction
[/jass]

PS:写了才知道有多麻烦........
PS2:附上演示(进入后按Esc)

w.w3x

17 KB, 下载次数: 10

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-25 07:24 , Processed in 0.099396 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表