ActionScript
TypeScript
JavaScript

LayaDCC工具

发布时间:2016-12-29

1.dcc工具及使用说明

1.1.为什么要打dcc

         一般情况下,游戏每次运行时都需要从服务器端去下载资源,为了节省资源下载带来的消耗,避免二次加载,我们提供了打dcc的方案,打dcc目前有3种方式

        1.1.1.APP联网包

        游戏第一次运行时,会从服务器端下载资源,第二次运行时,会对修改过的资源进行校验,并生成一个二进制文件,LayaNative启动的时候就会根据该二进制文件对更新了的资源进行下载,未更新的资源则直接从本地缓存读取。

        1.1.2.APP联网资源包

        游戏第一次运行时就会对修改过的资源进行校验,并生成一个二进制文件,LayaNative启动的时候就会根据该二进制文件对更新了的资源进行下载,未更新的资源则直接从本地缓存读取。

        1.1.3.APP离线包(构建单机包)

        直接把所有网站上的资源进行cache,因为是单机版本,不支持资源动态更新,如果想要更新资源,只能重新打APP。同时需要修改一个配置文件,如下

        IOS:index.js

        默认_inline=!conchConfig.localizable为联网包,需要改为离线包,如下所示:

999.png

        Android:MainActivety.java

        默认mplugin.game_plugin_set_option("localize","false");为联网包,需要改为离线包,将参数false改为true即可,如下所示:

222.png

1.2.dcc介绍

        LayaDcc是用来给项目打包资源并生成dcc文件的工具,让用户设备访问服务端时具备游戏项目文件增量更新的功能。

        LayaDcc会遍历游戏中所有的项目文件,并自动生成一个包含所有项目文件签名的二进制文件,LayaNative启动的时候,会根据从服务器端获取到的Dcc信息,来判断具体需要更新哪个文件,以此来实现增量更新的功能。

1.3.dcc的流程简介

{97A03BFA-2857-422C-8234-43A2FE8709B3}.jpg

     

1.3.dcc安装和使用

        LayaDcc是一个基于Node.js的命令行程序,所以需要Node.js的环境(Node.js下载地址:https://nodejs.org/en/)。

        注意:请使用最新版本的node.js(eg:v4.2.0版本),不支持旧版的Node.js的使用(eg:0.XX版本)

        如果实在不确定您当前具体是哪个版本的Node.js,可以通过命令行node -v进行查看。

        1.3.1.LayaDcc的安装

   命令行: 

npm install -g layadcc

        1.3.2.LayaDcc的使用方法

   命令行: 

layadcc 项目目录 -cache -url 服务器端的游戏地址

   命令行含义

           -cache :生成cache

           -lwr:文件路径全部转为小写

           -url:生成cache时对应的url

           -count outpath:cache的输出目录(不设置,默认在资源目录下)

举个简单的例子:

      一个游戏项目,放置目录在:e:/game/bestgame/

服务器端的运行地址:http://www.layabox.com/bestgame/index.html

命令行的写法就是:

layadcc e:/game/bestgame -cache -url http://www.layabox.com/bestgame/index.html

注意:1、上述/game/bestgame路径为游戏index.html启动文件所在的路径

    2、打DCC的链接地址中不能含有“?”号


实战操作

2.1.操作前模拟环境简介

   有一个游戏,放置在e:/game/bestgame/目录下,在线地址为

 http://10.10.82.113:8899/index.html,现在我们要做的就是把该目录下的资源打包进app并实现dcc.


2.2.步骤操作

步骤一:确保Node.js为新版本

111.png


步骤二:安装LayaDcc

222.png


【重点】步骤三:生成服务端dcc

666.png

        这个会在 e:/game/bestgame/目录下生成一个update目录,想办法把这个update目录上传到服务器的 对应目录(与运行文件xxx.html同级目录下)。

        服务器端dcc也可以直接在服务器执行,操作步骤如上所示(需要安装node和layadcc)。

注意:上述/game/bestgame路径为游戏index.html启动文件所在的路径

小提示:


          微端包,执行到步骤三已经完成,无需执行步骤四的操作

          本地资源包,需要同时执行步骤三和步骤四

          单机包:无需执行步骤三,只需执行步骤四即可

        如果对资源进行了修改,需要重新在服务器端打dcc,同步骤三所示



【重点】步骤四:生成cache

333.png


      这时候会自动在e:/game/bestgame下生成一个 layadccout 目录,我们需要把这个目录下面的cache目录拷贝到项目的资源目录下。

android:资源目录在assets目录

111.png

ios:资源路径是在resource目录。

888.png

步骤五:测试

       运行app,看日志,如果打包的资源文件都没有下载(除了首页index.html),就表示成功了。

注意:此工具执行的时候会修改所有文件的修改时间,目的是为了防止cdn在回源的时候以为文件没有被修改。 如果不需要此功能,需要改js源码

TODO

以后会加一个界面整合到IDE中。

常见问题

  1. 客户端报校验错误
            这个可能的原因很多,在没有cdn的情况下,一种可能是文本文件的回车换行的问题,即文件在发到服务器以后,回车换行被上传工具修改了。 例如svn,git,和部分上传软件都会做这种转换,解决方法是通过设置去掉这种转换,或者以zip的方式上传文件,在服务器解开。

  2. 资源未更新

           这个可能是由于开发者没有在服务器端打DCC导致的,例如我在本地加载并显示了一张图片A.png,我对A.png进行了修改,但是游戏运行时发现这张图片还是没有之前的显示。这时候开发者就需要重新检验下是否在服务端已经打过DCC。