HelloLimeJS.html
加入 jQuery 幫忙在迴圈裡傳參數。
<!DOCTYPE HTML>
<html>
<head>
<title>HelloLimeJS</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" src="../closure/closure/goog/base.js"></script>
<script type="text/javascript" src="HelloLimeJS.js"></script>
<style type="text/css">
#game {
width: 600px;
height: 400px;
margin: 0 auto;
border: 1px solid #eee;
}
</style>
</head>
<body onload="HelloLimeJS.start()">
<div id="game"></div>
</body>
</html>
HelloLimeJS.js
除了 replaceScene,還有 pushScene 可以用,甚至可以加入 lime.transitions 的過場效果。
Director 的 setPaused 也很重要。
lime.scheduleManager 當然一定要會。
//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');
goog.require('lime.transitions.Dissolve');
goog.require('lime.transitions.MoveInDown');
goog.require('lime.transitions.MoveInLeft');
goog.require('lime.transitions.MoveInRight');
goog.require('lime.transitions.MoveInUp');
goog.require('lime.transitions.SlideIn');
goog.require('lime.transitions.SlideInDown');
goog.require('lime.transitions.SlideInRight');
goog.require('lime.transitions.SlideInUp');
HelloLimeJS.transitions = new Array();
// 不能放在這裡,因為這時 goog.require 還沒發揮作用,所以 lime.transitions.* 這些 library 還不能用
//HelloLimeJS.transitions.push(lime.transitions.Dissolve);
//HelloLimeJS.transitions.push(lime.transitions.MoveInDown);
//HelloLimeJS.transitions.push(lime.transitions.MoveInLeft);
//HelloLimeJS.transitions.push(lime.transitions.MoveInRight);
//HelloLimeJS.transitions.push(lime.transitions.MoveInUp);
//HelloLimeJS.transitions.push(lime.transitions.SlideIn);
//HelloLimeJS.transitions.push(lime.transitions.SlideInDown);
//HelloLimeJS.transitions.push(lime.transitions.SlideInRight);
//HelloLimeJS.transitions.push(lime.transitions.SlideInUp);
HelloLimeJS.gameW = 600;
HelloLimeJS.gameH = 400;
/**
* 程式進入點
*/
HelloLimeJS.start = function() {
// initialize
HelloLimeJS.transitions.push(lime.transitions.Dissolve);
HelloLimeJS.transitions.push(lime.transitions.MoveInDown);
HelloLimeJS.transitions.push(lime.transitions.MoveInLeft);
HelloLimeJS.transitions.push(lime.transitions.MoveInRight);
HelloLimeJS.transitions.push(lime.transitions.MoveInUp);
HelloLimeJS.transitions.push(lime.transitions.SlideIn);
HelloLimeJS.transitions.push(lime.transitions.SlideInDown);
HelloLimeJS.transitions.push(lime.transitions.SlideInRight);
HelloLimeJS.transitions.push(lime.transitions.SlideInUp);
// 每個遊戲只會有一個導演 director,所以要 keep 起來
HelloLimeJS.director = new lime.Director(document.getElementById('game'), HelloLimeJS.gameW, HelloLimeJS.gameH);
HelloLimeJS.director.makeMobileWebAppCapable();
// 切入主場景
HelloLimeJS.mainScene();
};
/**
* 主場景
*/
HelloLimeJS.mainScene = function() {
// 同時間只會有一個有效的場景 scene
var scene = new lime.Scene();
// 圖層先,不一定要有,但方便管理
var layer = new lime.Layer().setPosition(0,0);
scene.appendChild(layer);
// 上背景色
var sprite = new lime.Sprite().setAnchorPoint(0,0).setPosition(0,0).setFill('#ff9').setSize(HelloLimeJS.gameW, HelloLimeJS.gameH);
layer.appendChild(sprite);
// 條列功能 - 標題
var top = 0;
var topStep = 20;
var labelE = new lime.Label().setText('This is the Main Scene').setAnchorPoint(0,0).setPosition(100,top+=topStep);
layer.appendChild(labelE);
// 條列功能 - 置換場景
var labelA = new lime.Label().setText('> Replace Scene').setAnchorPoint(0,0).setPosition(100,top+=topStep);
layer.appendChild(labelA);
goog.events.listen(labelA, 'click', function(){
HelloLimeJS.replaceScene();
});
// 條列功能 - 堆疊場景
var labelB = new lime.Label().setText('> Push Scene').setAnchorPoint(0,0).setPosition(100,top+=topStep);
layer.appendChild(labelB);
goog.events.listen(labelB, 'click', function(){
HelloLimeJS.pushScene();
});
// 條列功能 - 使用過場效果堆疊場景
for (var t in HelloLimeJS.transitions) {
var labelF = new lime.Label().setText('> Push Scene with Transition ' + t).setAnchorPoint(0,0).setPosition(100,top+=topStep);
labelF.createDomElement();
layer.appendChild(labelF);
// 在迴圈裡傳參數,搭配 jQuery 使用
$(labelF).attr('t', t);
goog.events.listen(labelF, 'click', function(){
var t = $(this).attr('t');
HelloLimeJS.pushSceneWithTransition(t);
});
}
// 條列功能 - 遊戲暫停
var labelD = new lime.Label().setText('> Pause director and resume in 3 seconds').setAnchorPoint(0,0).setPosition(100,top+=topStep);
layer.appendChild(labelD);
goog.events.listen(labelD, 'click', function(){
// 可以暫停所有動畫與 scheduleManager 啟動的 function
HelloLimeJS.director.setPaused(true);
// 只呼叫一次
lime.scheduleManager.callAfter(function(){
this.setPaused(false);
}, HelloLimeJS.director, 3000);
});
// 計數器,用來證明堆疊場景與暫停的效果
var cnt = 0;
var labelC = new lime.Label().setText('Counting').setAnchorPoint(0,0).setPosition(100,top+=topStep);
layer.appendChild(labelC);
// 間隔一定時間呼叫,LimeJS 不建議使用 setTimeout 與 setInterval
lime.scheduleManager.scheduleWithDelay(function(){
this.setText('Counting - ' + cnt++);
}, labelC, 1000);
HelloLimeJS.director.replaceScene(scene);
// 動畫,用來證明暫停的效果
var circle = new lime.Circle().setSize(50,50).setFill('#06f').setAnchorPoint(0,0).setPosition(0,top+=topStep);
layer.appendChild(circle);
var leftStep = 5;
// 間隔一定時間呼叫
lime.scheduleManager.scheduleWithDelay(function(){
var p = this.getPosition();
if (p.x > 550 || p.x < 0) {
leftStep = -leftStep;
}
p.x += leftStep;
this.setPosition(p);
}, circle, 10);
};
/**
* 置換場景
*/
HelloLimeJS.replaceScene = function() {
var scene = new lime.Scene();
var layer = new lime.Layer().setPosition(0,0);
scene.appendChild(layer);
var sprite = new lime.Sprite().setAnchorPoint(0,0).setPosition(0,0).setFill('#f9f').setSize(HelloLimeJS.gameW, HelloLimeJS.gameH);
layer.appendChild(sprite);
var labelA = new lime.Label().setText('This is a Replaced Scene').setAnchorPoint(0,0).setPosition(100,0);
layer.appendChild(labelA);
var labelB = new lime.Label().setText('> Return to the main scene').setAnchorPoint(0,0).setPosition(100,50);
layer.appendChild(labelB);
goog.events.listen(labelB, 'click', function(){
HelloLimeJS.mainScene();
});
// 取代原來的場景,銷毀原來的場景
HelloLimeJS.director.replaceScene(scene);
};
/**
* 使用堆疊方式更換場景
*/
HelloLimeJS.pushScene = function() {
var scene = new lime.Scene();
var layer = new lime.Layer().setPosition(0,0);
scene.appendChild(layer);
var sprite = new lime.Sprite().setAnchorPoint(0,0).setPosition(0,0).setFill('#9ff').setSize(HelloLimeJS.gameW, HelloLimeJS.gameH);
layer.appendChild(sprite);
var labelA = new lime.Label().setText('This is a Pushed Scene').setAnchorPoint(0,0).setPosition(100,0);
layer.appendChild(labelA);
var labelB = new lime.Label().setText('> Pop Scene and return to the main scene').setAnchorPoint(0,0).setPosition(100,50);
layer.appendChild(labelB);
goog.events.listen(labelB, 'click', function(){
// 銷毀目前的場景,露出原來的場景
HelloLimeJS.director.popScene();
});
// 在原來的場景上堆疊新的場景,原來的場景只是暫時看不見
HelloLimeJS.director.pushScene(scene);
};
/**
* 使用過場特效更換場景
*/
HelloLimeJS.pushSceneWithTransition = function(t) {
// 取得過場特效
var t2 = HelloLimeJS.transitions[t];
var scene = new lime.Scene();
var layer = new lime.Layer().setPosition(0,0);
scene.appendChild(layer);
var sprite = new lime.Sprite().setAnchorPoint(0,0).setPosition(0,0).setFill('#9ff').setSize(HelloLimeJS.gameW, HelloLimeJS.gameH);
layer.appendChild(sprite);
var labelA = new lime.Label().setText('This is a Pushed Scene').setAnchorPoint(0,0).setPosition(100,0);
layer.appendChild(labelA);
var labelB = new lime.Label().setText('> Pop Scene and return to the main scene').setAnchorPoint(0,0).setPosition(100,50);
layer.appendChild(labelB);
goog.events.listen(labelB, 'click', function(){
HelloLimeJS.director.popScene();
});
// 加入過場特效
HelloLimeJS.director.pushScene(scene, t2, 2);
};
// this is required for outside access after code is compiled in ADVANCED_COMPILATIONS mode
goog.exportSymbol('HelloLimeJS.start', HelloLimeJS.start);
------
---

沒有留言:
張貼留言