第八章GameCache初步接触
Game Cache,也即游戏缓存,简称GC。
那么在WE中,这个游戏缓存是个什么样的角色呢?原本BLZ只是将缓存用来进行战
役之间的数据传递。它最初能存贮的数据类型只有5种:unit(单位)、integer(
整数)、real(实数)、string(字符串)、boolean(布尔)。“这也太少了吧
!”不错,确实少了。但是这个少归少,却已经够我们用的了。
我们先看看用于GC的存贮、读取、清除与同步不同类型数据的相关函数:
+ Shingo Jass Highlighter 0.41
存贮:
native StoreString takes gamecache cache, string missionKey, string
key, string value returns boolean
native StoreUnit takes gamecache cache, string missionKey, string
key, unit whichUnit returns boolean
native StoreReal takes gamecache cache, string missionKey, string
key, real value returns nothing
native StoreInteger takes gamecache cache, string missionKey, string
key, integer value returns nothing
native StoreBoolean takes gamecache cache, string missionKey, string
key, boolean value returns nothing
读取:
native GetStoredBoolean takes gamecache cache, string missionKey, string
key returns boolean
native GetStoredInteger takes gamecache cache, string missionKey, string
key returns integer
native GetStoredReal takes gamecache cache, string missionKey, string
key returns real
native GetStoredString takes gamecache cache, string missionKey, string
key returns string
native RestoreUnit takes gamecache cache, string missionKey, string key,
player forWhichPlayer, real x, real y, real facing returns unit
清除
native FlushGameCache takes gamecache cache returns nothing
native FlushStoredMission takes gamecache cache, string missionKey
returns nothing
native FlushStoredBoolean takes gamecache cache, string missionKey,
string key returns nothing
native FlushStoredUnit takes gamecache cache, string missionKey, string
key returns nothing
native FlushStoredInteger takes gamecache cache, string missionKey,
string key returns nothing
native FlushStoredReal takes gamecache cache, string missionKey, string
key returns nothing
native FlushStoredString takes gamecache cache, string missionKey,
string key returns nothing
同步
native SyncStoredBoolean takes gamecache cache, string missionKey,
string key returns nothing
native SyncStoredInteger takes gamecache cache, string missionKey,
string key returns nothing
native SyncStoredReal takes gamecache cache, string missionKey, string
key returns nothing
native SyncStoredString takes gamecache cache, string missionKey, string
key returns nothing
native SyncStoredUnit takes gamecache cache, string missionKey, string
key returns nothing
看到了吧,存贮的数据类型少,但是相关函数却不少呀。我们常用的就只有前三类
,即:存贮,读取,清除。大体上讲这类函数的通用格式是这样的:
存贮
GC存贮数据类型函数名(某缓存,类别名,项目名,值)
读取
GC读取数据类型函数名(某缓存,类别名,项目名)
返回
对应值的类型的数据
清除
GC清除整个缓存函数名(某缓存)
GC清除缓存类别函数名(某缓存,类别名)
GC清除缓存项目函数名(某缓存,类别名,项目名)
就这样,我们只需要记忆以上这种格式,就记住了以上这么多函数。
有人说这个很像Windows的文件夹系统,的确很像;但是我却更愿意将这个比作是
一个表格,说具体点吧,就比作是一个Excel表格吧:缓存-----表格名;类别名-
----某横行的数据名;项目名-----某竖例的数据名。这样一个横例加上一个竖例
就确定了一个格子,那么这个格子中的数据就是我们要的,或者就是我们要存数据
的地方。如下示意图: 下载 (21.02 KB)
2009-2-8 14:41
上面这个图我们就将这个表格的名字称作是缓存名;项目名就是各竖列的名;类别
名就是各行的名称;这样不同类别中会有就有多个项目,各个项目将会对应地存在
一个数据。但是缓存中的每一个空格中可以同时存贮
unit,integer,real,Boolean,string这5个类型数据各一个,老死不相干扰。比如
:
+ Shingo Jass Highlighter 0.41
call
StoreInteger(udg_GC,"A","A",123)
call
StoreBoolean(udg_GC,"A","A",false)
call
StoreUnit(udg_GC,”A”,”A”,u)
call
StoreString(udg_GC,"A","A","ABC")
call
StoreInteger(udg_GC,"A","A",234)
以上前四个所存贮的四个不同数据,可以并存,但是如果你后面再存进来一个新的
整数型数据,这个新的将会覆盖原来的已存贮的整数型数据,其他的也是如此。
很多JASS高手把缓存比作一个仓库,什么有用就把什么装进去,在需要的时候再从
里面拿出来,这个比喻再贴切不过了。但是若仅仅是缓存单枪匹马是杀不出如此好
的口碑的。它之所以能有如此好的口碑,全杖在它与ReturnBug结合起来才导致的
。那么当GameCache与ReturnBug结合之后,所起的作用远远超出了1+1=2的效果,
应该是远远大于2。
之前,介绍的那么多与缓存相关的函数,很多时候不那样写,也不用那么多。例如
,通常我都这样写:
+ Shingo Jass Highlighter 0.41
//缓存创建
function game takes nothing returns gamecache
if bj_lastCreatedGameCache==null then
call FlushGameCache(InitGameCache("Alex.w3v"))
set bj_lastCreatedGameCache=InitGameCache("Alex.w3v")
endif
return bj_lastCreatedGameCache
endfunction
//存贮、读取与清除
//存贮实数与某handle挂钩
function RealHandleStore takes real i,handle project,string node returns
nothing
call StoreReal(game(),I2S(H2I(project)),node,i)
endfunction
//存贮整数与某handle挂钩
function IntegHandleStore takes integer i,handle project,string node
returns nothing
call StoreInteger(game(),I2S(H2I(project)),node,i)
endfunction
//读取与某handle挂钩的整数
function IntegHandleRead takes handle project,string node returns
integer
return GetStoredInteger(game(),I2S(H2I(project)),node)
endfunction
//读取与某handle挂钩的实数
function RealHandleRead takes handle project,string node returns real
return GetStoredReal(game(),I2S(H2I(project)),node)
endfunction
//清除与某handle挂钩的缓存类数据
function FlushData takes handle project returns nothing
call FlushStoredMission(game(),I2S(H2I(project)))
endfunction
//清除缓存
function FlushCache takes nothing returns nothing
call FlushGameCache(game())
endfunction
当缓存与ReturnBug结合起来的时候,我们只要上面这几个函数便足够了。
|