找回密码
 点一下
查看: 9376|回复: 36

[无聊]无聊的研究内容,对象的Handle数值占位

[复制链接]
发表于 2006-4-1 22:36:05 | 显示全部楼层 |阅读模式
测试了一些对象的Handle数值占位.
"Handle数值占位"这个词是生造词语.意思是该类型的对象在创建后所选择的handle值和前一个对象的Handle值差多少.
比如物品(item)对象占位是2位,在创建一个新的物品时,如果前面有一个闪电(lightning,占位1)的Handle值为200000,那么这个物品的handle值通常就为200002,然后如过紧接着又创建一个单位(unit,占位3),那么该单位的handle值通常就为200005。  这个东西和所谓“内存地址”可完全是2回事情哦,注意。

目前暂时测试了以下几个典型:
闪电效果:1
特效:2
单位:3
可破坏物:3
物品:2
对话框:1


其中闪电效果这个东西最是奇怪,它和其他对象完全不一样,其他对象的handle有一个最小值(1048685以上,),但是这个闪电效果的handle却是从1开始递增的。

比如,如果初始handle为1048685,然后按顺序创建以下几个对象:

闪电效果,特效,单位,可破坏,闪电效果,物品,对话框,闪电效果

那么他们对对应的handle将是

1,1048687,1048690,1048693,2,1048695,1048696,3

由此可见,闪电效果自顾自从1开始递增,而其他对象则合力从 1048685以上的某个数字开始递增.双方完全不相干.


lightning还有二个奇特的特性.
一个是如果lightning的创建地点对于本机玩家是不可见的话,它根本就不会被创建,所以闪电效果完全是非同步的.

另一个特别之处是,闪电效果和其他对象不同.   其他对象被释放后,其handle值是不可再被回收利用的,而闪电效果完全相反.

例如,最后创建的一个对象如果是一个单位,值为1048695,我们删除掉他,然后再创建一个物品,那么该物品仍然会在1048695的基础上再加2,变成1048697.

但是闪电效果却不一样,如果上一个闪电效果是7,我们将他删除,那么再创建一个闪电效果的值就还是7.另外,如果我们一共创建了8个闪电效果,分别值是1-8,然后我们将其中的3号删除,那么之后我们创建的下一个闪电效果的值就是3了,明显的,闪电效果会自动回收用过的handle值

暂时就这么多老,要停电老,明天再试试其他没有试过的对象

[ 本帖最后由 麦德三世B 于 2006-4-1 22:39 编辑 ]
发表于 2006-4-1 22:40:51 | 显示全部楼层
是在一张完全空白的地图上测试的???

PS:麦德的DeadLine好早...
回复

使用道具 举报

 楼主| 发表于 2006-4-1 22:42:25 | 显示全部楼层
DeadLine?
这个词不是截止日期么?用在这里是虾米意思?
回复

使用道具 举报

发表于 2006-4-1 22:43:37 | 显示全部楼层
测试一下漂浮文字呢

.
回复

使用道具 举报

发表于 2006-4-1 22:51:04 | 显示全部楼层
原帖由 麦德三世B 于 2006-4-1 22:42 发表
DeadLine?
这个词不是截止日期么?用在这里是虾米意思?


偶宿舍大部分人用台机,一旦断电就会Dead一次
因此称断电时间为Deadline...
还有点紧迫感..
回复

使用道具 举报

 楼主| 发表于 2006-4-1 23:01:10 | 显示全部楼层
其实今天是周末,所以应该是11点半断电嗯嗯。比平时多了半小时。

…………已经离题了。

我们来讨论下这个神奇的现象对我们了解war3中对象的存放方式有什么帮助吧
回复

使用道具 举报

发表于 2006-4-1 23:05:56 | 显示全部楼层
如果lightning的创建地点对于本机玩家是不可见的话,它根本就不会被创建,所以闪电效果完全是非同步的.

如果对于某个Lightning,玩家A可见,玩家B不可见,那么玩家B就不会创建那个lightning?
当玩家B移动画面到可以看见那个lightning的时候又会怎么样?

PS:貌似偶的deadline也素11:30,比平常晚0.5h
回复

使用道具 举报

 楼主| 发表于 2006-4-1 23:13:23 | 显示全部楼层
不是当前画面又没有移动到那一点,而是那一点是否处于战争迷雾的笼罩之下。

如果在X点执行创建闪电效果动作,玩家1对于X正好是战争迷雾无的状态,玩家2为有战争迷雾。
那么只有玩家1的机器上会有这个闪电效果,就算之后玩家2探索过了X点,也是不会出现闪电效果的。


闪电效果的创建、显示、删除、移动、改变颜色都是可以不同步的,所以我以前曾经用这个做过模拟红色警戒2的心灵信标
回复

使用道具 举报

发表于 2006-4-1 23:18:07 | 显示全部楼层
貌似LIGHT有250还是255的个数限制吧?
回复

使用道具 举报

发表于 2006-4-1 23:24:55 | 显示全部楼层
不是,根据我的猜想,闪电效果可能可以达到1048685个?

上次弄出的250上限的结论是触发设计错误导致的
回复

使用道具 举报

发表于 2006-4-1 23:26:38 | 显示全部楼层
哦。那么,安息吧,麦德。恩恩。
回复

使用道具 举报

发表于 2006-4-1 23:27:42 | 显示全部楼层
楼上便与我华丽的扣分吧!
回复

使用道具 举报

发表于 2006-4-2 01:16:38 | 显示全部楼层
以前我测试过浮动文字:
Handle值是从99开始的
每次减1,一直减少到0
当再创建浮动文字时,仍返回0

也是说,地图上最多只能有100个浮动文字


我估计:
对于浮动文字、闪电效果这些Handle值很小的数据类型
WC3是分别使用使用不同数组来存放该类型对象的
创建函数实际上是返回数组中未使用对象的索引
所以可能不需要使用“= null”来释放



还有这个1048685怎么看起来很眼熟
将它转成16进制看看,是10006Dh
100000h不就是1M吗

[ 本帖最后由 zyl910 于 2006-4-2 01:23 编辑 ]
回复

使用道具 举报

发表于 2006-4-2 09:31:47 | 显示全部楼层
我还没有测试出来闪电效果的上限。
总之我创建了10万多个闪电效果,

可把我这个已然花屏的显卡给害苦了。到了10万多的时候已经花的看不清数字了,只好重起电脑


但是一张地图通常也用不了这么多
回复

使用道具 举报

发表于 2006-4-2 09:35:35 | 显示全部楼层
说到这个\"Handle数值占位\"那么必须给我一个交代.....
回复

使用道具 举报

 楼主| 发表于 2006-4-2 10:44:57 | 显示全部楼层
那个漂浮文字我也测试了。
确实从99递减到1,最多可以创建99个

而且也是和lightning一样,其handle值是可回收的,不同的是,lightning是取最小可回收值,texttag是取最大。(我觉得利用这2个东西的特性倒可以简化一些需要排序的系统)

由于lightning是从1-?,texttag是从99-1,因此他们的值就完全有互相冲突的可能,于是我试验了以下触发

[trigger]See
    Events
        Player - Player 1 (Red) skips a cinematic sequence
    Conditions
    Actions
        For each (Integer A) from 1 to 70, do (Actions)
            Loop - Actions
                Set p = (Center of (Playable map area))
                Floating Text - Create floating text that reads 1 at p with Z offset 0.00, using font size 10.00, color (0.00%, 0.00%, 0.00%), and 100.00% transparency
                Set f = (Last created floating text)
                Custom script:   set udg_i=H2I(udg_f)
                Debug - Debug (String(i))
                Set l = (Create a lightning effect Chain Lightning - Primary and Disabled visibility from (0.00,0.00,0.00) to (0.00,0.00,0.00))
                Lightning - Change l color to 0.00 0.00 0.00 0.00
                Custom script:   set udg_i=H2I(udg_l)
                Debug - Debug (String(i))
                Point - Remove p[/trigger]

运行以上触发后,发现闪电效果的handle值的确是可能和漂浮文字重叠的,该触发运行后,屏幕显示为:

70
1
69
2
...
...
...
29
69
30
70

为测试他们2者是否互相干扰,于是各拿出其中handle值为70的那2个对象进行以下试验:
[trigger]Check
    Events
        Player - Player 1 (Red) types a chat message containing 1 as An exact match
    Conditions
    Actions
        Set x = (Point(0.00, 0.00))
        Set x = (Point(500.00, 500.00))
        Custom script:   set udg_l=I2l(70)
        Custom script:   set udg_f=I2f(70)
        Lightning - Change l color to 1.00 1.00 1.00 1.00
        Lightning - Move l x y
        Point - Remove x
        Point - Remove y
        Floating Text - Change permanent state of f to Disable
        Floating Text - Change text of (Last created floating text) to 1000 using font size 10.00
        Floating Text - Change the lifespan of (Last created floating text) to 10.00
        Wait 2.00 seconds
        Lightning - Destroy l[/trigger]



结果发现,这2个对象虽然handle都为70,但是实际运作起来却全无干扰,也就是lightning的handle值和texttag的handle值是完全不相干

[ 本帖最后由 麦德三世B 于 2006-4-2 10:47 编辑 ]
回复

使用道具 举报

发表于 2006-4-2 10:52:12 | 显示全部楼层
貌似木有花屏鸟???恩……………………
回复

使用道具 举报

 楼主| 发表于 2006-4-2 11:04:39 | 显示全部楼层
这个不是我的电脑。。
回复

使用道具 举报

发表于 2006-4-2 11:09:08 | 显示全部楼层
难道对于浮动文字、闪电效果这些Handle值很小的数据类型素用栈保存滴???
回复

使用道具 举报

 楼主| 发表于 2006-4-2 11:25:22 | 显示全部楼层
我是编程盲人…………所谓栈是指?…………
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 21:26 , Processed in 0.080663 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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