Warcraft 版 (精华区)

发信人: nonnamer (无名), 信区: Warcraft
标  题: 地图编辑器之CACHE专题
发信站: 哈工大紫丁香 (Wed Aug 17 01:14:27 2005), 转信

在魔兽争霸地图编辑器(以下简称WE)中我们可以定义许多变量,通过用变量的保存
和处理,能够实现很多在编程中才能实现的功能。
但是这些变量都是在地图中设置的,附属于设置了这个变量的地图。也就是说,当这
幅地图游戏结束后这些变量中保存的内容即消失无存。有时因为一些特殊的效果,要
用到几幅地图,在游戏中根据需要让玩家进入另一幅地图游戏。比如魔兽争霸(以下
简称WAR3)自带的剧情战役。这时,能不能有一种让变量在不同的地图之间作交换,
让这些需要的资料在地图结束后依然存在的方法呢?
这时,CACHE(缓存)为我们提供了多地图间资料传递的方法。
使用CACHE的基本思路如下:
1 - 创建(打开)CACHE
2 - 将CACHE中保存的数据载入具体的内存变量
3 - 在使用过程中把需要保存的变量内容存入CACHE的临时空间
4 - 在地图结束时把当前CACHE的临时空间中的资料(包括过去的资料,新增的资料
和更改过的资料)再存入硬盘中的CACHE文件中
地图中保存的CACHE是一个后缀名为.w3v的文件,放在当前玩家账号的目录下。因为
涉及到单机账号,所以CACHE在网络游戏中的应用可能会出一些问题。以下的讨论仅
指在单机RPG中实现。
下面,我们就从使用CACHE的第一步,创建CACHE开始,逐步讲解CACHE的具体使用方
法。
一、创建你的CACHE
在触发器中关于CACHE的操作的ACTION一般都以“Game Cache -”开头。没有与CACHE
直接相关的事件和条件。因为CACHE的功能简单的说就是在外部建立一个文件保存变
量的值,所以其中的内容都是先将其包括的资料读入变量,关于变量的操作也就和CACHE
没多大关系了。说白了,CACHE指令的使用一般只用在开始(读入)和结束(保存)

创建CACHE的指令:
Game Cache - Create Game Cache
参数:
1 - MapName.w3v
创建的Cache文件名
参数类型:字符串型
这个CACHE指令一定要用在对CACHE操作之前。
在使用了这个指令后,WAR3会做这几件事:
首先会在内存中开辟出一块空间作为该CACHE在内存中的临时空间。
接着建立一个指向该CACHE临时空间的指针,该指针变量的值可以用"Last created 
game cache"函数求得。
然后会在当前单机账号的目录下查找和该CACHE文件名相同的CACHE文件,如果找到则
将其原有的资料读入刚才创建的CACHE临时空间中。
在CACHE中应用到的一般都是些对游戏比较重要的数据,建议在地图开始时的Map 
Initialization
事件解发中就对CACHE进行调用。而且这个指令只是在调用时才打开硬盘上的文件进
行读取,读完后其CACHE内容都在内存中的临时空间中,所以不会对系统的稳定性产
生什么影响。
比如:Game Cache - Create a game cache from cachdemo.w3v
因为在其后对CACEH的操作中都要用到这个CACHE的指针(拿OOP的话来说就是句柄)
,不然计算机不知道要对哪个CACHE做操作,所以如果在你的应用中同时要打开多个
CACHE的话在创建完CACHE后一定要用一个CACHE变量来保存刚才创建的CACHE的指针数
据。当然在一般情况下我们只用一个CACHE已经足够,这样的话只要使用Last created
 game cache函数就可求得最后创建的CACHE的位置。(总共只有一个,当然也是最后
一个啦) 保存该CACHE的方法是在创建CACHE的语句后加一句:
Set <Name of Game Cache Type Variable> = (Last created game cache)
二、在CACHE中保存简单类型变量
所谓的简单类型就是指像整数这种不容易被再分割,其可参与运算分类较明确的变量
类型(自己总结的,不知有没有人听懂~~~~呵呵)。
WAR3 CACHE支持保存的简单变量类型有Integer(整型),Real(实型),Boolean(
布尔型,即只能容纳True or False两种值的变量)。
用到ACTION有:
保存整型:
Game Cache - Store Integer
保存实型:
Game Cache - Store Real
保存布尔型:
Game Cache - Store Boolean
因为这三个ACTION的参数从名字上看都一样,而且多数功能也一样,所以放在一起说
明。
参数:
1 - Value
要保存的值
参数类型:看是哪个ACTION而定。如果是Store Integer那就是整型值,Store Real
就是实型值。
2 - Label
该值在CACHE中的标签名,可以理解成为该值在CACHE中的变量名。
参数类型:字符串型
3 - Category
该值所属分类,和LABEL一起放在下面解释
参数类型:字符串型
4 - Last created game cache
其实就是要保存的目标CACHE的指针,这里默认值是用Last created game cache函数
来求。
参数类型:Game Cache
在这里可能就是Label和Category有点让人迷惑。其实这两个字串的值都是由人定的
,想起什么名字就可以起什么名字。他们的关系有点像是文件名和目录名的样子。这
样设计的目的只是方便管理。并不一定代表在CACHE中同一个Category中的内容都放
在一起(当然也可能这么做,但个人认为这样做只起到提高读取效率,而且比较浪费
空间)。比如在WAR3的官方战役中,ORC第八关所要用到的CACHE数据都放在名为"Orc8
"的Category中。而Label就是具体的值的名字。
再举例,在一个连续的战役中你要保存英雄每一关的等级。OK,那么等级的LABEL就
叫"HeroLevel"吧,而在每关结束时就把这个数值保存到"Map?"的Category中。?就是
下一关的关卡序数。这样Map1里的HeroLevel就放了第一关中所用到的英雄级数,Map2
中的HeroLevel就放了第二关中所用到的英雄级数。这只是其中一种用法。比如还可
以用Category对Label进行分类。在名为"hero"的Category中保存英雄的资料,在"player
"分类中保存用户的一些个人资料,在"game"分类中保存游戏进行状态的一些数据等
。而如果你允许让步同户同时创建多个角色并可以在他们之间转换,那可以把英雄的
资料分别放在"char1","char2","char3"等分类中~~~~~ 总之,Label和Category两
个参数只是一种不错的管理CACHE中资料的方法,并不是那么复杂的。
实用举例:
保存整型
Game Cache - Store 10 as Integer Label of Simple in (Last created game cache
)
其实他的使用方法也差不多,就不再详述了。
三、将保存的内容正式放到硬盘上
注意刚才我们所做的只是把这些内容放到CACHE在内容中的临时空间里,并没有放到
硬盘上的CACHE文件中。如果地图结束的话这些内容并不能在下次数需要时从CACHE文
件中读出来。所在,请一定记住在地图结束之前要告诉计算机把CACHE存盘。
所用ACTION指令:
Game Cache - Save Game Cache
参数:
Last created game cache
同样是要保存的CACHE的指针,默认值是用函数求得。
参数类型:Game Cache
这个参数非常简单,直接就可以,他会把当前内存临时空间里的CACHE的数据放到当
前单机账号的CACHE文件中。文件名是在创建CACHE时指定的文件名。
四、从CACHE中读取简型变量
假设现在我们已经创建(打开)了一个已有的CACHE,要把里面的一些简单类型的数
据取出来。我们知道CACHE中的简单型变量分Integer,Real,Boolean三种,他们的
提取方法是在该类型的赋值运算中通过函数来获得,而非使用单纯的ACTION。
最简单的方法用建立一个对应类型的变量,然后在用Set Variable赋值ACTION中引用
这些函数。
三个对应的函数名为:
整型:
Game Cache - Load Integer Value(注意函数也会有对应的命名分类,还是很好找
的)
实型:
Game Cache - Load Real Value
布尔型:
Game Cache - Load Boolean Value
函数参数:
1 - Label
2 - Category
3 - Last created game cache
这三个参数的意义和上面保存ACTION中的意义完全一样,只不过一个是指要放到哪里
去,一个是说要从哪里取。在这里就不多说啦。
例:Set intTest = (Load IntegerLabel of Simple from (Last created game cache
))


--
其实,我只是一个手持镰刀的稻草人
你就是我守护的麦子
等到大风吹折了我的腰
希望你已经成熟
我毕竟不能守护你到永远
我只是一个普普通通的死神


※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 172.16.3.76]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.967毫秒