魔兽地图吧's Archiver

feelerly 发表于 2008-3-5 12:59

[教程] 新手之路 - 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]]

feelerly 发表于 2008-3-5 14:37

占位编辑(葱头:13)
今天有事

singna 发表于 2008-10-12 16:02

(葱头:01) 挖坟问下为什么不继续更新.....就是对这个不明白

w5517230 发表于 2008-10-12 16:46

顶了........对这个很感兴趣.
特别是暗夜的教程都很详细.........

剑魔 发表于 2008-10-12 17:58

。。这算水帖吗?。。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.