javascript
LimeJS指南1
# 時(shí)間軸
## Director
一切都要從director開(kāi)始。director是一個(gè)每個(gè)游戲所需要的基本對(duì)象,它連接所有網(wǎng)頁(yè)上
的Limejs邏輯到任何單個(gè)地方。如果你來(lái)自flash世界你可以把它當(dāng)做一個(gè)舞臺(tái),Cocos2d用
戶(hù)可以當(dāng)做自己的director。所有其他人可以把它當(dāng)做一個(gè)前部的控制者。
每一個(gè)游戲只有一個(gè)director的例圖。它操控游戲的全程視口,控制屏幕上的可見(jiàn)物。在你
的邏輯涌現(xiàn)之初你得創(chuàng)建一個(gè)director的例圖。構(gòu)造函數(shù)的方法的參數(shù)是container DOM元
素,舞臺(tái)寬度和高度以像素表示。
#!JavaScript
var director = new dfkit.Director(document.body,320,460);
## Scene
scene是一個(gè)可視元素的不獨(dú)立的部分,覆蓋了所有的視口,這說(shuō)明在同一時(shí)間只有一個(gè)
scene能被激活。比如說(shuō),在一般的游戲邏輯中你將會(huì)有菜單的scene,游戲的scene和游戲
結(jié)束的scene。要使一個(gè)scene可見(jiàn),你調(diào)用‘director.replaceScene(scene)’或
者‘director.pushScene(scene)’。區(qū)別就在于*pushScene* 不會(huì)去除之前的scene,但是
將他保留在一個(gè)隱藏的stack中,因此你可以通過(guò)“director.popScene()”使它可見(jiàn)
#!JavaScript
var scene = new lime.Scene();
director.replaceScene(scene);
## Transitions
僅僅使用‘replaceScene()’只能做到快速的scene間的切換,以至于在視覺(jué)上不可接受。
你可以通過(guò)設(shè)置‘replaceScene()’的*transition*和*duration*屬性以使它更好。
transition定義了當(dāng)前的scene被解除和新的scene被激活的動(dòng)畫(huà)制作?,F(xiàn)成的有多種多樣的
*Silde*和*Move*的過(guò)度,還有用于淡入效果的*Dissolve*
#!JavaScript
director.replaceScene(menuscene,lime.transition.SlideInRight);
director.replaceScene(gamescene,lime.transition.Dissolve,2);
## ScheduleManager
Lime中的所有東西都是以repaint-dirty模式繪制的,這說(shuō)明每次你改變某些東西,你的方
法調(diào)用不會(huì)嚴(yán)格地與對(duì)等的DOM或Canvas2dContext調(diào)用相互關(guān)聯(lián),相反的,你設(shè)置的屬性被
標(biāo)記為污物并將在下一幀中被擦去。這就允許我們只能更新一次,只能更新需要更新的且保
持所有更新不出狀況。最后一條準(zhǔn)則允許我們?cè)谌魏螘r(shí)候在渲染的方法之間切換。由于在
Javascript中沒(méi)有任何的on-enter-frame事件,我們坐了一個(gè)*lime.sheduleManager*靜態(tài)
對(duì)象來(lái)模擬它。以下是它提供的方法:
- schedule(callback, context)
- Call a function in every frame. Context is object that represents
*this*.
this固定指向運(yùn)行時(shí)的當(dāng)前對(duì)象
- 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.
你將不會(huì)在你的游戲代碼中直接使用Javascript內(nèi)置的方法‘setTimeout
()’和‘setInterval()’(反正我是用的,在循環(huán)的優(yōu)化方面),*lime.schduleManager*
為你提供了有相同功能和額外特性。你的回調(diào)函數(shù)通過(guò)同一個(gè)回調(diào)函數(shù)最近的一次執(zhí)行在幾
毫秒內(nèi)所延遲的參數(shù)被調(diào)用。這允許你做出順利的動(dòng)畫(huà)效果即使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ù)(這個(gè)我也用的)也給我們帶來(lái)支持暫停的好處。當(dāng)
你希望暫停你的游戲你只要在你的director對(duì)象上調(diào)用‘setPaused(true)’,這能暫停所
有的時(shí)刻表函數(shù)和動(dòng)畫(huà)效果。一旦通過(guò)調(diào)用‘setPaused(false)’你恢復(fù),你的所有代碼將
照?;謴?fù)。當(dāng)你的游戲處于暫停狀態(tài),*lime.PauseScene*的例圖被放置在director的一個(gè)
激活的scene中。如果你希望在這個(gè)狀態(tài)有一些定制的外觀,你可以無(wú)視這個(gè)類(lèi)功能。
#!JavaScript
mygame.director.setPaused(true);
## Layers
現(xiàn)在我們準(zhǔn)備在屏幕上加一些東西。為了更好地展示對(duì)象我們引入*lime.Layer*對(duì)象。你可
以把它當(dāng)做ps中的層。層是用來(lái)承載物品的,它們就像任何其他對(duì)象,區(qū)別就在于它們沒(méi)有
身體或大小。它們的唯一內(nèi)容就是它們的子對(duì)象。所以如果需要的話,你創(chuàng)建它們,將它加
到tree,位置,并將子對(duì)象加到它們身上。只需明白,層不是必須的 - 你可以添加任何展
示的對(duì)象到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é)
- 上一篇: 差分方程模型
- 下一篇: Careercup - Google面试