成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

開源跨平臺移動項目Ngui【Action動作系統(tǒng)】

ziwenxie / 2966人閱讀

摘要:與關(guān)鍵幀動作這是動作系統(tǒng)的核心。而關(guān)鍵幀動作又包含理更加基本的元素關(guān)鍵幀關(guān)鍵幀包含的屬性與屬性是同名的且與所有視圖的屬性都是對應(yīng)關(guān)鍵。為動作執(zhí)行到達關(guān)鍵幀時觸發(fā)。

Ngui簡介

這是一個GUI的排版顯示引擎和跨平臺的GUI應(yīng)用程序開發(fā)框架,基于NodeJS/OpenGL,這也是第一個在移動端Android/iOS融合NodeJS的前端GUI項目,至此JavaScript成為了真正意義上前后端通吃的語言。

Ngui的目標(biāo):在此基礎(chǔ)上開發(fā)GUI應(yīng)用程序可擁有開發(fā)WEB應(yīng)用般簡單與速度同時兼顧Native應(yīng)用程序的性能與體驗。

開源跨平臺移動項目Ngui【簡介】

開源跨平臺移動項目Ngui【入門】

開源跨平臺移動項目Ngui【視圖與布局系統(tǒng)】

開源跨平臺移動項目Ngui【Action動作系統(tǒng)】

開源跨平臺移動項目Ngui【CSS樣式表規(guī)則及用法】

Ngui API 文檔

什么是Action動作

什么是動作呢?顧名思義它是管理運行環(huán)境中所有動作的中樞,通俗點講就是動畫。它也是總個框架核心組件之一,它提供動作的創(chuàng)建、刪除、插入,以及提供對關(guān)鍵幀與過渡的諸多操作。關(guān)鍵幀的過渡可以使用三次貝塞爾曲線,或內(nèi)置的曲線 linear/ease/ease_in/ease_out/ease_in_out,這也和大多數(shù)主流框架以及游戲引擎類似。

動作是什么原理

動作怎么驅(qū)動視圖進行流暢運動的呢?其實原理很簡單,我們可以把動作系統(tǒng)看做一個獨立的系統(tǒng)與視圖或渲染完全不相關(guān)。它們之間的關(guān)系是動作自身的變化最終會映射調(diào)視圖,這個過程是通過調(diào)用視圖暴露的公有方法或?qū)傩詠硗瓿傻?。這個過程完全是單向的,且視圖不會向動作發(fā)出任何指令。
比如說現(xiàn)在創(chuàng)建了一個新的關(guān)鍵幀動作,給它設(shè)置兩個關(guān)鍵幀,且x的值經(jīng)過1秒鐘從0變化到100。這個過程是動作自身發(fā)生的變化并且?guī)优c之相關(guān)的視圖一同發(fā)生改變,請記住這個過程視圖是被動的,而動作才是主動的發(fā)生改變。

import { ngui, Div } from "ngui";
import KeyframeAction from "ngui/action";
var div = new Div();
var act = new KeyframeAction();
act.add({ x: 0, time: 0 });
act.add({ x: 100, time: 1e3/*毫秒*/ });
div.width = 50;
div.height = 50;
div.backgroundColor = "#f00";
div.action = act;
div.appendTo(ngui.root);
act.play();
動作類別

以下是框架提供的幾個類型與繼承聯(lián)系

注:帶*號的為抽象類型或協(xié)議沒有構(gòu)造函數(shù)

[Action]*

[GroupAction]*

[SpawnAction]

[SequenceAction]

[KeyframeAction]

Action*

這是所有動作的基礎(chǔ)類型,也是抽象類型不可以直接被實例。
提供了一些基本的api操作,播放,停止,跳轉(zhuǎn) 等,具體可查看API手冊。

GroupAction*

這是個集合的動作類型,提供子動作的添加刪除插入。有了子動作就可以幫你實現(xiàn)更加復(fù)雜的動畫場景。
它也有兩個具體的子類型 [SpawnAction] 、[SequenceAction]。

SpawnAction

并行動作顧名思義即就是它的子動作都是并行運行的。并且以最長子動作的時長做為自身的時長來執(zhí)行動作,較短時長的子動作則在結(jié)尾等待動作的結(jié)束或一個循環(huán)的的終止。

SequenceAction

串行動作這個比較好理解,子動作一個接著一個執(zhí)行,全部執(zhí)行完成后結(jié)束或開始新的循環(huán)。

KeyframeAction與Frame

關(guān)鍵幀動作這是動作系統(tǒng)的核心。所有動作的實現(xiàn)均在這里完成它是動作系統(tǒng)基本單元,前面的[GroupAction]只有包含[KeyframeAction]類型的動作才有真正的義意。
而關(guān)鍵幀動作又包含理更加基本的元素關(guān)鍵幀[Frame],關(guān)鍵幀包含的屬性與CSS屬性是同名的且與所有視圖的屬性都是對應(yīng)關(guān)鍵。通俗的說比如[View]上會有x屬性而[Frame]上也會有x屬性,如果關(guān)鍵幀上有視圖上并不存在的屬性,那么這個屬性對視圖是無效的。比如[View]上就不存在width屬性那么這個屬性的改變不會影響到[View],但如果綁定的視圖是[Div]那么width的改變一定會影響到它,這與CSS樣式表類似。

看下面的例子:

// 這是有效的動作
var act1 = new KeyframeAction();
var div = new Div();
div.backgroundColor = "#f00";
act1.add({ width: 10, height: 10 });
act1.add({ width: 100, height: 100, time: 1e3 });
div.action = act1;
act1.paly();
// 這是無效的
var act2 = new KeyframeAction();
var view = new View();
act2.add({ width: 10, height: 10 });
act2.add({ width: 100, height: 100, time: 1e3 });
view.action = act2;
act2.paly();
View.action屬性

[View.action]做為[View]的一個屬性可接收多種類型的參數(shù),之前給大家展示的例子中創(chuàng)建動作是很繁瑣的,但active提供多種類型的參數(shù)類型的支持,包括json數(shù)據(jù)與Action對像實例本身。前面的例子中已介紹過Action方式,下面著重說json數(shù)據(jù)方法。大家也可研讀ngui.jsaction.js中的源代碼,其它[View.action]屬性只是做簡單的調(diào)用轉(zhuǎn)發(fā),功能的實現(xiàn)其實是在action.js文件中的create()方法里實現(xiàn)的。

看例子:

// 這是創(chuàng)建KeyframeAction
var div = new Div();
div.action = {
    keyframe: [
        { x: 0 },
        { x: 100, time: 500 },
        { x: 0, time: 1000 },
    ],
    loop: -1,
};
var div2 = new Div();
div.action = [
    { x: 0 },
    { x: 100, time: 500 },
];

// 這是創(chuàng)建SequenceAction
var div3 = new Div();
div3.action = {
    seq: [
        [ // 這是個子KeyframeAction
            { x: 0 },
            { x: 100, time: 1e3 },
        ],
        { // 這是個子SpawnAction
            spawn: [
                [ // 這是個子KeyframeAction
                    { y : 100 }, { y: 200, time: 2e3 }
                ],
                [ // 這是個子KeyframeAction
                    { width : 200 }, { width: 100, time: 1e3 }
                ],
            ] 
        }
    ],
};

// 這是創(chuàng)建SpawnAction
var div4 = new Div();
div4.action = {
    spawn: [ // 這里只包含一個子KeyframeAction
        {x: 0}, {x: 200, time: 2e3} 
    ]
};

大家可以看到上面的例子中有4種典型的創(chuàng)建方法。主要看你給的json數(shù)據(jù)是否存在這三個屬性seq、spawn、keyframe,對應(yīng)[SpawnAction]、[SequenceAction]、[KeyframeAction],外加一個json數(shù)據(jù)類型檢查,數(shù)據(jù)類型為數(shù)組就創(chuàng)建[KeyframeAction]。并且這可以嵌套使用。

View.transition()方法

這是一個簡單創(chuàng)建簡單過渡動畫的方法,實現(xiàn)原型為action.jstransition()方法,與[View.action]一樣[View.transition()]只做簡單的轉(zhuǎn)發(fā)。

典型應(yīng)用:

view.transition({
    time: 1000,
    y: 100, 
    x: 100,
})

具體可查閱手冊。

View.onActionKeyframe與View.onActionLoop

這兩個事件是由動作產(chǎn)生并發(fā)送的。

View.onActionKeyframe為動作執(zhí)行到達關(guān)鍵幀時觸發(fā)。因為畫面渲染是固定的幀率,觸發(fā)總是發(fā)生在幀的渲染時,所以可能會與理想中的時間值有所誤差提前或延后,這個延時值會保存在事件數(shù)據(jù)的delay上。提前為負數(shù),延時為正數(shù)。

View.onActionLoop動作循環(huán)開始時觸發(fā),第一次執(zhí)行動作并不會觸發(fā)。同樣它也會有延時,也同樣記錄在delay

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/89971.html

相關(guān)文章

  • 平臺開源項目Ngui【基準(zhǔn)性能測試報告】

    摘要:測試主要集中在圖形方面,這包括調(diào)用的時間開銷,圖形繪制的幀率,的運行百分占比。注意下面的時間單位都為毫秒,占比以單核為準(zhǔn)表示一個核心滿載運行。占比越低幀數(shù)越高表示性能越好。 Ngui簡介 這是一個GUI的排版顯示引擎和跨平臺的GUI應(yīng)用程序開發(fā)框架,基于NodeJS/OpenGL,這也是第一個在移動端Android/iOS融合NodeJS的前端GUI項目,至此JavaScript成為了...

    SKYZACK 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<