2012-09-28

Hello LimeJS

在 Windows 安裝 LimeJS 安裝 LimeJS 與建立 HelloLimeJS 後,就來看看 LimeJS 怎麼運作的。

HelloLimeJS 只有兩個檔案,HelloLimeJS.html 與 HelloLimeJS.js。

前面忘了講,LimeJS 必須使用 HTML 5,也就是說瀏覽器必須支援 HTML 5 才能正確執行 Lime JS,README.md 裡提到瀏覽器的支援狀況。

##Browser support:

- *Current:* Chrome, Safari 5, Firefox 3.6+, Opera, IE9, Mobile Safari
- *Soon:* Android, Blackberry Playbook
- *Maybe:* WebOS
特別注意的是 IE 只有 IE 9。

就來看看 HelloLimeJS.html 吧。
<!DOCTYPE HTML>
<html>
<head>
<title>HelloLimeJS</title>
<script type="text/javascript" src="../closure/closure/goog/base.js"></script>
<script type="text/javascript" src="HelloLimeJS.js"></script>
</head>
<body onload="HelloLimeJS.start()"></body>
</html>
簡單到不行,兩個 javascript 和一個 onload。

LimeJS 是架構在 Google Closure Library 之上,所以得先加入 base.js,然後加入本身使用的 js,所以 onload 呼叫的 function 自然是定義在 HelloLimeJS.js 裡。
// set main namespace
goog.provide('HelloLimeJS');

// get requirements
goog.require('lime.Director');
goog.require('lime.Scene');
goog.require('lime.Layer');
goog.require('lime.Circle');
goog.require('lime.Label');
goog.require('lime.animation.Spawn');
goog.require('lime.animation.FadeTo');
goog.require('lime.animation.ScaleTo');
goog.require('lime.animation.MoveTo');

// entrypoint
HelloLimeJS.start = function(){

var director = new lime.Director(document.body,1024,768),
var scene = new lime.Scene(),

// ...略過內容

director.makeMobileWebAppCapable();

// set current scene active
director.replaceScene(scene);

}

// this is required for outside access after code is compiled in ADVANCED_COMPILATIONS mode
goog.exportSymbol('HelloLimeJS.start', HelloLimeJS.start);
先看架構的部份,Google Closure 特色之一就是提供了像是 Java package 的 Namespace,所以第一行先宣告這個專案(或這個檔案)的 namespace,接下來也像 Java 一樣 import 需要用到的 class,只是這邊是叫做 require 與 namespace,接下來就是程式的起點 HelloLimeJS.start() ,也就是 HelloLimeJS.html 裡 onload 所呼叫的。

LimeJS 有點像是 Flash,由一個導演(lime.Director)控制一堆場景(lime.Scene),適時加入一些聲光效果。

先 new 個 lime.Director,指定使用的 Dom 物件與長寬,再 new 個 lime.scene,在 scene 裡加入內容,然後呼叫 director.replaceScene() 就開播了。

最後一行請看 LimeJS Project 快速瀏覽,重點就是最佳化 Javascript 時,會將變數與 function 名稱縮到最短,但從 HTML 呼叫的 function 卻不可以被改名,要不然就呼叫不到了,所以這邊就是在串這一段的。
---
---
---

沒有留言:

張貼留言