偶久网

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

网站魔兽热门地图

查看: 6800|回复: 3

魔兽中缓存的应用

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

ou99孽缘 title=
 楼主| 发表于 2010-12-14 20:43:30
{:6_325:}
zx5585269
发表于 2012-1-10 16:22:00
飘过飘过飘过飘过飘过飘过飘过飘过
快速回复 返回顶部 返回列表