[教程] 新手之路 - GameCache入门教程
[font=宋体]请选看完初并记住 "自定义函数" 中的所有内容. 本章不再对以前的知识进行重复讲解.----------------------------------------------------------------
[size=4][b][color=#ff0000]第四章 游戏缓存的应用[/color][/b][/size]
----------------------------------------------------------------[/font]
这次, 我们将进行缓存的入门教学. 现在发的基本是都属于入门教程. 所以讲得很简略. 这些教程只起来引领作用, 引导大家一步步进入Jass的学习. 入门教程中的内容不要求全部理解, 但要求全部记住, 以后在我写中级教程时, 就会知道我为什么会做这个要求了.好了, 不多说, 下面开始讲解缓存.
在学习GameCache时, 不要问我"什么是缓存?"这种问题. 这会让我不知道回答. 关于缓存, 最多的是用于一些软件, 操作系统 中, 比如WinXP中有个虚拟内存, 说明了就是缓存. 缓存, 就行缓冲储存. 相对于内存而言, 缓存更接近于在硬盘上暂时储存一些内存数据, 那为什么要暂时储存一些内存数据, 可能是因为内存不够用, 另一个原因是缓存在局部代替内存, 缓减内存的开销, 从而加快电脑的速度. 最常见的是我们看MV之类的大部头电影, 缓存的使用率会更高. 关于缓存的知识, 建议不要局限于魔兽, 缓存是电脑的基本常识之一,所以笔者声明, 不要问"什么是缓存?"这种让人回答不了的问题.
[font=宋体] [color=#cf4809]在Jass中, 缓存具有高度的[b][u]实用性[/u][/b]与[b][u]可开发性[/u][/b]。[/color][/font]
[b]缓存的应用理论步骤:[color=red]a[/color].创建缓存文件号、[color=red]b[/color].[/b][b]将数据存入缓存、[color=red]c.[/color][/b][b]从缓存读取数据、[color=red]d[/color].[/b][b]清空缓存中的数据。[/b]
[b]魔兽争霸III中可以直接用缓存储存的数据类型有:[color=blue]integer[/color]、[color=blue]real[/color]、[color=blue]string[/color]、[color=blue]boolean[/color]、[color=blue]unit[/color][/b]。所以缓存的所有功能都是针对这几种数据展开的,只要加以区别就很容掌握缓存的具体用法了。一般情况下,在使用WE的时候,不需要使用JASS便能进行缓存操作,但WE毕竟是有局限的,很多情况下一些简单的问题也会弄得非常难以解决,所以用JASS写代码是非常有必要的,解决了问题的同时,也会体现出一位编程者的思路。这也使用在使用JASS的时候,很多作者都有不同的的习惯。呵呵,当然我也有我的习惯,在此只是略提及打住。
[b][size=4]游戏缓存功能说明:[/size][/b]
[b]一、创建缓存[/b]
初始化缓存都用下面这个功能,然后用变量记录下所传回的缓存。
( [color=blue][b]gamecache[/b][/color] ) [color=purple]InitGameCache[/color]( [color=blue][b]string[/b][/color] cacheName )
[b]二、储存数据[/b]
一般储存数据的缓存功能都是以"[b][color=red]Store[/color][/b]XXXX"为开头,其实"XXXX"就是:[color=blue]integer[/color]、[color=blue]real[/color]、[color=blue]string[/color]、[color=blue]boolean[/color]、[color=blue]unit[/color]其中的一个。然后就是公式化的参数格式了:[b]缓存参数、数据分类、数据标签、数据[/b]。
比如储存整数:[color=purple]StoreInteger[/color]( [color=blue][b]gamecache[/b][/color] gc, [color=blue][b]string[/b][/color] missionkey, [color=blue][b]string[/b][/color] name, [color=blue][b]integer[/b][/color] i )
比如储存单位:[color=purple]StoreInteger[/color]( [color=blue][b]gamecache[/b][/color] gc, [color=blue][b]string[/b][/color] missionkey, [color=blue][b]string[/b][/color] name, [color=blue][b]unit[/b][/color] u )
反正其他几个都差不多的,所以不需要死记。不过在这步之前,要保证缓存已被创建,否则是无效的。
[b]三、读取数据[/b]
一般读取数据的缓存功能都是以"[b][color=red]GetStored[/color][/b]XXXX"为开头,其实"XXXX"就是:[color=blue]integer[/color]、[color=blue]real[/color]、[color=blue]string[/color]、[color=blue]boolean[/color]其中的一个。然后就是公式化的参数格式了:[b]缓存参数、数据分类、数据标签[/b]。而单位有些不同,读取出来时是直直被创建缓指定玩家的,所以参数中还需要加入坐标参数和玩家参数。
比如读取整数:( [color=blue][b]integer[/b][/color] ) [color=purple]GetStoreInteger[/color]( [color=blue][b]gamecache[/b][/color] gc, [color=blue][b]string[/b][/color] missionkey, [color=blue][b]string[/b][/color] name )
比如读取单位:( unit ) [color=#535353][color=purple]RestoreUnit[/color] [/color]( [color=blue][b]gamecache[/b][/color] gc, [color=blue][b]string[/b][/color] missionkey, [color=blue][b]string[/b][/color] , [color=blue][b]player [/b][/color]forWhichPlayer, [color=#0000ff][b]real[/b][/color] x, [color=#0000ff][b]real [/b][/color]y, [color=#0000ff][b]real[/b][/color] facing)
至于读取实数,布尔,字符和整数的差不多,在此不一一说明。
[b]四、清空数据[/b]
一般清空数据的缓存功能都是以"[color=red][b]FlushStored[/b][/color]XXXX"为开头,其实"XXXX"就是:[color=blue]integer[/color]、[color=blue]real[/color]、[color=blue]string[/color]、[color=blue]boolean[/color]、[color=blue]unit[/color]其中的一个。
比如清空整数: [color=purple]FlushStoreInteger[/color]( [color=blue][b]gamecache[/b][/color] gc, [color=blue][b]string[/b][/color] missionkey, [color=blue][b]string[/b][/color] name )
另外还有按 missionkey 参数来清空数据: [color=purple]FlushStoreMission[/color]( [color=blue][b]gamecache[/b][/color] gc, [color=blue][b]string[/b][/color] missionkey )
还有个功能是清除缓存中的所有的数据:[color=#800080]FlushGameCache[/color]( [color=blue][b]gamecache[/b][/color] gc )
清空后的数据将不存在在缓存中。
[b]五、同步数据[/b]
一般同步数据的缓存功能都是以"[color=red][b]SyncStored[/b][/color]XXXX"为开头,其实"XXXX"就是:[color=blue]integer[/color]、[color=blue]real[/color]、[color=blue]string[/color]、[color=blue]boolean[/color]、[color=blue]unit[/color]其中的一个。
同步数据是让玩家缓存中的数据一致的手段,原因就是因为缓存文件中,各玩家电脑中缓存数据是不一致的,所以要用缓存同步,达到一致。这个功能看似没有什么用,用处还是很多的,比如现行的主机判断就是用这个功能达成的。
以下是主机判断代码,大家可以参考一下:
[jass]
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
[/jass]
[[i] 本帖最后由 feelerly 于 2009-1-5 20:07 编辑 [/i]] 占位编辑(葱头:13)
今天有事 (葱头:01) 挖坟问下为什么不继续更新.....就是对这个不明白 顶了........对这个很感兴趣.
特别是暗夜的教程都很详细......... 。。这算水帖吗?。。
页:
[1]