找回密码
 点一下
楼主: Renee

[Union Bug]多值多类型对多值多类型的强制类型转换~~替代H2I和I2H的新方案~~

[复制链接]
发表于 2008-2-28 11:59:04 | 显示全部楼层
继续关注中....
回复

使用道具 举报

 楼主| 发表于 2008-2-28 17:44:52 | 显示全部楼层
另外~~还有一个要点~~如果整个函数中最后声明的被覆盖变量并非handle类型~~

那么在之后的操作过程中~~根本不会影响对象的变量连接数!~~也就是说~~

如果把前文的触发换成这样~~

[trigger]
HandleRelease
    Events
        Player - Player 1 (Red) skips a cinematic sequence
    Conditions
    Actions
        Custom script:   local trigger udg_t1
        Custom script:   local trigger udg_t2
        Custom script:   local integer udg_Re
        set t2 = (Create Trigger)
        Trigger - Destroy t1
        Debug - Debug (String(Re))
[/trigger]

根本就不需要考虑set null的问题~~对象被删除后~~handle表元素可以直接被重用~~

显然~~这也算是共用空间论的一个佐证~~也就是说~~由于这个空间最后被定义为一个非handle~~那么根本就不会跟踪它指向的handle表位~~也就不会增加该表位的变量连接数~~
回复

使用道具 举报

 楼主| 发表于 2008-2-29 13:43:42 | 显示全部楼层
另外~~使用Return Bug来将任意一个整数I2H 为handle~~赋给一个handle类型变量的话~该值对应的handle表空间的变量连接数依然会增加~~而不管该表位有没有指向实际对象~~

而如果使用Union Bug的上面写个方法来转换为handle则完全没有该问题~~因为整个公用空间被最后定义为非handle~~这样就不会追踪它所指向的表位~~这也是我进一步推荐使用这个写法的原因~~


另外抱歉之前做出的“string没法和handle、real放在一起转换”的结论是错误的~~我当时还没有发现最后声明的被覆盖变量和handle表位变量连接数增加的关系~~当时导致游戏崩溃纯粹是因为最后声明的那个变量是个unit~~而转换的整数数值过大~~游戏试图给该表位变量连接数+1的时候由于超出表的最大范围而crash了~~而其实只要把声明顺序调换一下就完全米问题~~
回复

使用道具 举报

发表于 2008-2-29 14:25:08 | 显示全部楼层
如果要用union bug是不是必须要用到全局变量?
而且,,,,,,,,,,,,,,,,,,,这bug能应用在什么地方?
一个到现在还不知道jass的global在那里写的人路过。
回复

使用道具 举报

发表于 2008-2-29 14:30:37 | 显示全部楼层
但是如果使用了全局变量,那么return bug和gc的应用就没意义了,它们不就是为了在函数间传递变量而用的吗?
回复

使用道具 举报

 楼主| 发表于 2008-2-29 18:07:21 | 显示全部楼层
如果你不知道它能用在什么地方~~它对你就是没用的~~
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 02:43 , Processed in 0.195058 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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