找回密码
 点一下
查看: 3972|回复: 2

关于CatalogFieldValueGet()函数教程一文中关于该函数最后一个参数作用的勘误。

[复制链接]
发表于 2010-4-15 05:44:56 | 显示全部楼层 |阅读模式
其实这个问题我早就发现了,但是现在才想起写出来。因为刚巧在群里提到科技的事情。


在该教程中
http://bbs.islga.org/read-htm-tid-38662.html

关于CatalogFieldValueGet()函数的最后一个参数我当时是这样写的。
int player

指定玩家,为什么要指定玩家呢,毕竟某些属性可能可以是不同步的,在不影响游戏进程的前提下。尤其是那些用于显示名称和信息的属性。因此这个参数可以指定究竟是从哪个玩家的电脑上读取数据。

实际上我当时弄错了。不同玩家的模板的属性值确实可以是不同的。但并不是我当时想的那种不同步

这一次我的进行了更严格的测试,得到了player参数的正确用法。


游戏中的科技升级能以玩家为覆盖面直接修改该玩家的数据模板中任意属性的值。由此达成升级效果。

比如玩家1升级了机枪兵1攻,那么玩家1的Marine这个效果模板(也就是指定机枪兵攻击力的模板)的Amount属性的值就变成了7,而其余玩家还都是6。



未命名.jpg


所以另一个事实是

游戏数据模板属性的值其实是可以在游戏进行中修改的。


这点我以前也弄错了(我很高兴地得知我弄错了,因为模板的属性值真的可以在游戏里改)。因此估计将来真的会有CatalogFieldValueSet()这样的函数也说不定。



但这只是不同玩家的数据不同,而不是不同步。

从目前的事实来看。SC2读取模板后为每个玩家都准备了一份模板,方便记录他们在游戏进行过程中对模板进行的修改(比如通过科技升级。)

但这复数份模板同时保存在联机中每台电脑的内存里。而不是每台电脑只保存自己那一份模板。

同时这也意味着,就算你在跟电脑玩单机,在游戏进行过程中,CatalogFieldValueGet()的最后一个参数不一样,得到的值也不一样。因为你和电脑升的科技不一样。


顺便一提:SC2的科技升级系统是比较强力的。因为它本质上就是直接对各个模板本身进行修改,不过可修改的属性类型有限。这个今后还得想blz提提。
发表于 2012-2-25 16:37:59 | 显示全部楼层
顶一个   支持楼主!!!!
回复

使用道具 举报

发表于 2012-2-25 20:17:06 | 显示全部楼层
LS挖坟
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-8-7 06:45 , Processed in 0.124201 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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