这次, 我们将进行缓存的入门教学. 现在发的基本是都属于入门教程. 所以讲得很简略. 这些教程只起来引领作用, 引导大家一步步进入Jass的学习. 入门教程中的内容不要求全部理解, 但要求全部记住, 以后在我写中级教程时, 就会知道我为什么会做这个要求了.好了, 不多说, 下面开始讲解缓存.
在学习GameCache时, 不要问我"什么是缓存?"这种问题. 这会让我不知道回答. 关于缓存, 最多的是用于一些软件, 操作系统 中, 比如WinXP中有个虚拟内存, 说明了就是缓存. 缓存, 就行缓冲储存. 相对于内存而言, 缓存更接近于在硬盘上暂时储存一些内存数据, 那为什么要暂时储存一些内存数据, 可能是因为内存不够用, 另一个原因是缓存在局部代替内存, 缓减内存的开销, 从而加快电脑的速度. 最常见的是我们看MV之类的大部头电影, 缓存的使用率会更高. 关于缓存的知识, 建议不要局限于魔兽, 缓存是电脑的基本常识之一,所以笔者声明, 不要问"什么是缓存?"这种让人回答不了的问题.
在Jass中, 缓存具有高度的实用性与可 开发性。
缓存的应用理论步骤:a.创建缓存文件号、b.将数据存入缓存、c.从 缓存读取数据、d.清空缓存中的数据。
魔兽争霸III中可以直接用缓存储存的数据类型有:integer、real、string、boolean、unit。所以缓存 的所有功能都是针对这几种数据展开的,只要加以区别就很容掌握缓存的具体用法了。一般情况下,在使用WE的时候,不需要使用JASS便能进行缓存操作,但 WE毕竟是有局限的,很多情况下一些简单的问题也会弄得非常难以解决,所以用JASS写代码是非常有必要的,解决了问题的同时,也会体现出一位编程者的思 路。这也使用在使用JASS的时候,很多作者都有不同的的习惯。呵呵,当然我也有我的习惯,在此只是略提及打住。
游戏缓存功能说明:
一、创建缓存
初始化缓存都用下面这个功能,然后用变量记录下所传回的缓存。
( gamecache ) InitGameCache( string cacheName )
二、储存数据
一般储存数据的缓存功能都是以"StoreXXXX" 为开头,其实"XXXX"就是:integer、real、string、boolean、unit其中的一个。然后就是公式化的参数格式了:缓存参数、数据分类、数据标签、数据。
比如储存整数:StoreInteger( gamecache gc, string missionkey, string name, integer i )
比如储存单位:StoreInteger( gamecache gc, string missionkey, string name, unit u )
反正其他几个都差不多的,所以不需要死记。不过在这步之前,要保证缓存已被创建,否则是无效的。
三、读取数据
一般读取数据的缓存功能都是以"GetStoredXXXX" 为开头,其实"XXXX"就是:integer、real、string、boolean其中的一个。然后就是公 式化的参数格式了:缓存参数、数据分类、数据标签。而单位有些不同,读取出来时是直直被创建缓指定玩家的,所以参数中 还需要加入坐标参数和玩家参数。
比如读取整数:( integer ) GetStoreInteger( gamecache gc, string missionkey, string name )
比如读取单位:( unit ) RestoreUnit ( gamecache gc, string missionkey, string , player forWhichPlayer, real x, real y, real facing)
至于读取实数,布尔,字符和整数的差不多,在此不一一说明。
四、清空数据
一般清空数据的缓存功能都是以"FlushStoredXXXX" 为开头,其实"XXXX"就是:integer、real、string、boolean、unit其中的一个。
比如清空整数: FlushStoreInteger( gamecache gc, string missionkey, string name )
另外还有按 missionkey 参数来清空数据: FlushStoreMission( gamecache gc, string missionkey )
还有个功能是清除缓存中的所有的数据:FlushGameCache( gamecache gc )
清空后的数据将不存在在缓存中。
五、同步数据
一般同步数据的缓存功能都是以"SyncStoredXXXX" 为开头,其实"XXXX"就是:integer、real、string、boolean、unit其中的一个。
同步数据是让玩家缓存中的数据一致的手段,原因就是因为缓存文件中,各玩家电脑中缓存数据是不一致的,所以要用缓存同步,达到一致。这个功能看似没 有什么用,用处还是很多的,比如现行的主机判断就是用这个功能达成的。
以下是主机判断代码,大家可以参考一下:
+ Shingo Jass Highlighter 0.41
function MasterPlayer takes nothing returns player
call StoreInteger( udg_gc, "Player", "index", GetPlayerId( GetLocalPlayer() ) )
call TriggerSyncReady() // 准备同步数据,即以下是要同步的数据
call SyncStoreInteger( udg_gc, "Player", "index" )
call TriggerSyncStart() // 同步数据开始,同步了"Player", "index"标签下的数据后所有玩家的数据将是一样的,一般数据以主机为准。
return Player( GetStoredInteger( udg_gc, "Player", "index" ) )
endfunction
|
|
|