javascript
LimeJS指南1
# 時間軸
## Director
一切都要從director開始。director是一個每個游戲所需要的基本對象,它連接所有網(wǎng)頁上
的Limejs邏輯到任何單個地方。如果你來自flash世界你可以把它當(dāng)做一個舞臺,Cocos2d用
戶可以當(dāng)做自己的director。所有其他人可以把它當(dāng)做一個前部的控制者。
每一個游戲只有一個director的例圖。它操控游戲的全程視口,控制屏幕上的可見物。在你
的邏輯涌現(xiàn)之初你得創(chuàng)建一個director的例圖。構(gòu)造函數(shù)的方法的參數(shù)是container DOM元
素,舞臺寬度和高度以像素表示。
#!JavaScript
var director = new dfkit.Director(document.body,320,460);
## Scene
scene是一個可視元素的不獨立的部分,覆蓋了所有的視口,這說明在同一時間只有一個
scene能被激活。比如說,在一般的游戲邏輯中你將會有菜單的scene,游戲的scene和游戲
結(jié)束的scene。要使一個scene可見,你調(diào)用‘director.replaceScene(scene)’或
者‘director.pushScene(scene)’。區(qū)別就在于*pushScene* 不會去除之前的scene,但是
將他保留在一個隱藏的stack中,因此你可以通過“director.popScene()”使它可見
#!JavaScript
var scene = new lime.Scene();
director.replaceScene(scene);
## Transitions
僅僅使用‘replaceScene()’只能做到快速的scene間的切換,以至于在視覺上不可接受。
你可以通過設(shè)置‘replaceScene()’的*transition*和*duration*屬性以使它更好。
transition定義了當(dāng)前的scene被解除和新的scene被激活的動畫制作。現(xiàn)成的有多種多樣的
*Silde*和*Move*的過度,還有用于淡入效果的*Dissolve*
#!JavaScript
director.replaceScene(menuscene,lime.transition.SlideInRight);
director.replaceScene(gamescene,lime.transition.Dissolve,2);
## ScheduleManager
Lime中的所有東西都是以repaint-dirty模式繪制的,這說明每次你改變某些東西,你的方
法調(diào)用不會嚴(yán)格地與對等的DOM或Canvas2dContext調(diào)用相互關(guān)聯(lián),相反的,你設(shè)置的屬性被
標(biāo)記為污物并將在下一幀中被擦去。這就允許我們只能更新一次,只能更新需要更新的且保
持所有更新不出狀況。最后一條準(zhǔn)則允許我們在任何時候在渲染的方法之間切換。由于在
Javascript中沒有任何的on-enter-frame事件,我們坐了一個*lime.sheduleManager*靜態(tài)
對象來模擬它。以下是它提供的方法:
- schedule(callback, context)
- Call a function in every frame. Context is object that represents
*this*.
this固定指向運行時的當(dāng)前對象
- unschedule(callback, context)
- Clear previously scheduled function.
- scheduleWithDelay(callback, context, delay, opt_limit)
- Same as *schedule* but function is only called if if more than *delay*
seconds has passed from last execution.
- callAfter(callback, context, delay)
- Only call function once after the delay.
你將不會在你的游戲代碼中直接使用Javascript內(nèi)置的方法‘setTimeout
()’和‘setInterval()’(反正我是用的,在循環(huán)的優(yōu)化方面),*lime.schduleManager*
為你提供了有相同功能和額外特性。你的回調(diào)函數(shù)通過同一個回調(diào)函數(shù)最近的一次執(zhí)行在幾
毫秒內(nèi)所延遲的參數(shù)被調(diào)用。這允許你做出順利的動畫效果即使CPU的表現(xiàn)大大改變。
#!JavaScript
var velocity = 2;
lime.scheduleManager.schedule(function(dt){
var position = this.getPosition();
position.x += velocity * dt; // if dt is bigger we just move more
this.setPosition(position);
},ball);
## Pausing
使用scheduleManager而不是timer函數(shù)(這個我也用的)也給我們帶來支持暫停的好處。當(dāng)
你希望暫停你的游戲你只要在你的director對象上調(diào)用‘setPaused(true)’,這能暫停所
有的時刻表函數(shù)和動畫效果。一旦通過調(diào)用‘setPaused(false)’你恢復(fù),你的所有代碼將
照常恢復(fù)。當(dāng)你的游戲處于暫停狀態(tài),*lime.PauseScene*的例圖被放置在director的一個
激活的scene中。如果你希望在這個狀態(tài)有一些定制的外觀,你可以無視這個類功能。
#!JavaScript
mygame.director.setPaused(true);
## Layers
現(xiàn)在我們準(zhǔn)備在屏幕上加一些東西。為了更好地展示對象我們引入*lime.Layer*對象。你可
以把它當(dāng)做ps中的層。層是用來承載物品的,它們就像任何其他對象,區(qū)別就在于它們沒有
身體或大小。它們的唯一內(nèi)容就是它們的子對象。所以如果需要的話,你創(chuàng)建它們,將它加
到tree,位置,并將子對象加到它們身上。只需明白,層不是必須的 - 你可以添加任何展
示的對象到scene上,而層使你的文件更清晰。
#!JavaScript
var layer = new lime.Layer().setPosition(100,100);
scene.appendChild(layer);
for(var i=0;i<5;i++){
var box = customMakeBoxFunc().setPosition(i*50,0);
layer.appendChild(box);
}
轉(zhuǎn)載于:https://www.cnblogs.com/imbbctoo/p/3717832.html
總結(jié)
- 上一篇: 差分方程模型
- 下一篇: Spring整合Quartz定时发送邮件