配置scratch二次开发环境

scratch是一个开源的游戏制作平台,我们可以从GitHub上获取到他的代码,其中2.0是使用flash技术支持的,而3.0则是基于HTML5技术开发。

作为一名前端工程师,理所当然的选择3.0版本了,然而让人遗憾的是3.0还没有开发完成,所以还得等待一段时间。

那就先用2.0将就一下吧,scratch 2.0使用ActionScript开发,必须安装Java环境以及使用Dradle进行build。

这里重点说下环境

  • Java
  • Gradle
  • 至于其他的Gradle会自动去下载编译需要的依赖

按照上面的环境要求,一切准备妥当,首先就是先build一个试试咯,不然万一不行呢?那不是白搞了。果然,根据文档

scratch-builing.png
在项目下运行命令 ./gradlew build -Ptarget=11.6,首先是Gradle会下载一个名为 gradle-2.5-bin.zip,以后下载一堆 apache flex sdk相关的东西,最后还会下载两个 swc文件,这些就是所有的依赖了。可以在 scratch.gradle文件中看到
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath group: 'org.gradlefx', name: 'gradlefx', version: '1.2.0'
    }
}
repositories {
    ivy {
        name 'Apache Flex'
        artifactPattern 'http://archive.apache.org/dist/flex/[revision]/binaries/[module]-[revision]-bin.[ext]'
    }
    ivy {
        name 'Player Globals'
        artifactPattern 'http://fpdownload.macromedia.com/get/flashplayer/installers/archive/[module]/[module][revision].[ext]'
    }
}复制代码

如果一切都顺利。。。

那么还是会出错。

我的环境是Windows,说说我遇到的问题,按时间顺序来吧

  • 下载flex-sdk直接403
  • 运行命令./gradlew build -Ptarget=11.6报错Cannot invoke method replace() on null object
  • 解决上面的问题,重新执行命令,在执行:compileFlex任务时报XXXadvanced-telemetry参数配置错误

下面介绍解决问题的过程

  • http 403

首先尝试在浏览器打开下载链接,是可以下载的。所以问题出在运行环境了,好吧,第一想法就是先把域名给换成IP。换上果然成功,下载了68M左右的东西,仿佛看到了希望,接着还下载了一些其他的,仿佛离完成任务更接近了,然而跑着跑着不跑了,再跑时就完全乱了。那好吧,清除缓存再来(缓存文件在家目录下的.gladle/caches)。就这样不断重复浪费了两个小时睡觉时间。第二天上班不知怎么想的,直接用网上下载的zip包解压到了gladle sdks目录.gradle\gradleFx\sdks\[9113ebe5e674b4f43da6410401f9d4743f61c286]这一段乱七八糟的事flex-sdksha码,千万不要换掉,在build的时候gladle会检查是否有缓存zip包再来该文件夹下找(根据sha效验码)解压的文件。然后按照文档中介绍的下载那个两个swc依赖文件放到对应目录,后来验证,依赖问题算是解决。

debug.png
总结原因的话就是依赖在没下完整的情况下终端了程序的运行
  • Cannot invoke method replace() on null object
    这个问题主要原因在于命令./gradlew build -Ptarget=11.6,这里前面两个分别是项目下gradlew.gradlebuild.gradlePtarget是自定义的参数,11.6是希望的版本,看gradlew.gradle

    def target = hasProperty('target') ? target : '11.6'
    println "Target is: $target"
    def config = new ConfigSlurper(target).parse(file("${commonDir}/config.groovy").toURL())
    ...
    playerVersion = config.get('playerVersion')
    ...
    dependencies {
      flexSDK group: 'org.apache', name: 'apache-flex-sdk', version: '4.15.0', ext: 'zip'
      external group: 'macromedia.com', name: 'playerglobal', version: playerVersion.replace('.', '_'), ext: 'swc'
      ...
    }复制代码

    这里根据自定义的target属性来获取在配置文件中的配置信息。而配置文件

    environments {
      '11.6' {
          output = 'Scratch'
          playerVersion = '11.6'
          additionalCompilerOptions = [
                  "-swf-version=19",
                  "-define+=SCRATCH::allow3d,true",
          ]
      }
      '10.2' {
          output = 'ScratchFor10.2'
          playerVersion = '10.2'
          additionalCompilerOptions = [
                  "-swf-version=11",
                  "-define+=SCRATCH::allow3d,false",
          ]
      }
    }复制代码

    看起来没任何问题,但是当在gradlew.gradle输出target是得到的却是11即点后面的没有取到,所有playerVersion.replace('.', '_')会出错。解决方法就是把11.6使用引号包含起来或者不带参数build。

  • advanced-telemetry参数配置错误
    这个解决方法很简单,因为身为前端程序员并不了解Java或者gradle这个东西,对于ActionScript更是没了解过,一开始完全蒙圈,看错误提示就是这参数不对,所以暴力解决,全局搜索advanced-telemetry字样,果然在gradlew.gradle中找到了,然后删除这个参数。

最后BUILD SUCCESSFUL

你可能感兴趣的:(配置scratch二次开发环境)