找回密码
 点一下
查看: 3463|回复: 20

[作废]在SC2中获得对象唯一Id及用唯一Id获得对象的方法

[复制链接]
发表于 2010-8-10 22:09:32 | 显示全部楼层 |阅读模式
这个帖子全部作废。


大家还是用10楼的方法吧。
发表于 2010-8-10 22:19:57 | 显示全部楼层
主楼辛苦了
回复

使用道具 举报

发表于 2010-8-10 22:51:53 | 显示全部楼层
看到那个 while 我就心里发毛
回复

使用道具 举报

发表于 2010-8-10 22:59:13 | 显示全部楼层
不知道下面两个函数是不是自定义值呢?
[codes=galaxy]
native void     UnitSetCustomValue (unit inUnit, int inIndex, fixed inVal);
native fixed    UnitGetCustomValue (unit inUnit, int inIndex);
[/codes]

感觉单位的话用这个也不错。
回复

使用道具 举报

 楼主| 发表于 2010-8-10 23:00:51 | 显示全部楼层
这东西只能用于单位,非常不通用。
回复

使用道具 举报

发表于 2010-8-10 23:10:45 | 显示全部楼层
是呀,不过比起war3的自定义值来就强大不少了。

不知道BLZ打算什么时候才把这些函数给补全了。
回复

使用道具 举报

 楼主| 发表于 2010-8-10 23:27:42 | 显示全部楼层
不过按照实际应用的效率来讲,应该是单位的自定义值和其他对象的遍历混合使用比较好。

单位虽然数量多,但是一张地图的单位组不会多到哪里去。用遍历法应该不会有啥问题。然后单位就用自定义值来给他们编号。

唯一的问题是doodad。多,而且又无法附加自定义数据。好在通常倒也很少遇到会去取得doodad的唯一id的场合就是了。
回复

使用道具 举报

发表于 2010-8-11 08:17:03 | 显示全部楼层
请问下单位以外的ID具体在什么地方能比较好的应用呢?还没用到那么高级的东西~~~
主要用单位唯一ID比较顺手,具体就是用哪个返回单位属性,参数传递24的
回复

使用道具 举报

发表于 2010-8-11 08:46:17 | 显示全部楼层
地板那个不错哦,不能U2I也无所谓了...
其他对象不会也打算这么搞吧...
回复

使用道具 举报

发表于 2010-8-11 09:14:17 | 显示全部楼层
看到那个 while 我就心里发毛+1
为咩这么重要的api会没有呢
回复

使用道具 举报

发表于 2010-8-12 00:29:14 | 显示全部楼层
const int r_Unit_HandleId = 24; //HandleId

这个24号得到是什么呢?
回复

使用道具 举报

 楼主| 发表于 2010-8-12 00:33:21 | 显示全部楼层
引用第8楼Conflux于2010-08-11 08:46发表的  :
地板那个不错哦,不能U2I也无所谓了...
其他对象不会也打算这么搞吧...

关键就是其他对象不能用啦。
回复

使用道具 举报

发表于 2010-8-12 03:29:29 | 显示全部楼层
好,好,好东西!
记下了。
回复

使用道具 举报

发表于 2010-8-15 09:21:35 | 显示全部楼层
10楼的代码我依然是有疑问呀。

刚才自己在图里面试验了一下,下面是代码,随便写的。
[codes=galaxy]
    UIDisplayMessage(PlayerGroupAll(), c_messageAreaChat, IntToText(UnitGetPropertyInt(EventUnit(), 24, true)));
    UIDisplayMessage(PlayerGroupAll(), c_messageAreaChat, IntToText(UnitGetPropertyInt(EventUnit(), 24, true)/64));
    lv_i=0;
    while(EventUnit()!=UnitFromId(lv_i)){
        lv_i=lv_i+1;
    }
        UIDisplayMessage(PlayerGroupAll(), c_messageAreaChat, IntToText(lv_i));
    UIDisplayMessage(PlayerGroupAll(), c_messageAreaChat, StringToText("==============="));
触发条件是选取单位。
[/codes]

24号数据得到的值都是64的倍数,从0开始递增。和UnitFromId 中的id貌似没什么特殊的联系(我能发现的就只是id最大的一个单位其24号数据是0,也可能是凑巧。两者的数值貌似每次装载地图都不会发生变化),id的特性我只知道一点点,就是它是按照单位摆放上地图的次序递增的,也就是第一个摆上的一般就是id=1了。

下面就是问题了,我在地图装载完之后再创建新的单位,再次运行上面的代码,提示函数执行时间过长。于是我把lv_i的初始值该为-1000,依然发生同样错误,lv_i直接跑到了一个相当大的数了...难道应该是更大的负数?还是说我的测试方法错了。

另外再次求24号数据的解释,到底是啥捏?

===================================
补充下吧,这个24号数据如wetosc 所描述的,更像是单位的唯一标识。对于新建的单位,其数值是以64为基数递增的。只不过由这个数值转换为单位类型的api倒是没有...

好了,先去休息了。
回复

使用道具 举报

 楼主| 发表于 2010-8-15 10:08:26 | 显示全部楼层
好吧,既然能获得唯一标识,那么我这个帖子完全就是没用的。

就此作废吧。

wetosc 同学是怎么发现的呢?
回复

使用道具 举报

发表于 2010-8-16 10:36:50 | 显示全部楼层
这个传递24的方法我也知道哈,就是我在7楼说的那个~~
记错了。。。当时谁说的来着。。。
回复

使用道具 举报

发表于 2010-8-16 17:36:19 | 显示全部楼层
刚看到你的贴的时候我还没看懂,参考了10楼说的才明白。

找到了这个网址,http://www.sc2mapster.com/api-do ... t-get-property-int/
回复

使用道具 举报

发表于 2010-8-16 22:36:26 | 显示全部楼层
这点上被老外超过了真糟糕,不过我想知道的是10楼和7楼到底是怎么知道的?


自己测试出来的呢还是看老外的资料得来的呢?
回复

使用道具 举报

发表于 2010-8-16 22:55:34 | 显示全部楼层
看了native里的定义果然只有到23....玻璃渣果然对我们留了一手呀
回复

使用道具 举报

发表于 2010-8-17 07:58:05 | 显示全部楼层
引用第18楼麦德三世于2010-08-16 22:36发表的  :
这点上被老外超过了真糟糕,不过我想知道的是10楼和7楼到底是怎么知道的?


自己测试出来的呢还是看老外的资料得来的呢?
我不是自己测试出来的,是听群里别人教的,。具体是谁还真忘记了~不过当时他教我的代码好像就是10楼的那个
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 16:53 , Processed in 0.082153 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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