国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

微信小游戲排行榜的原生顯示

int64 / 764人閱讀

摘要:前言微信小游戲開放了好友關系鏈,使得小游戲的社交能力得到了加強,有助于增加游戲的活躍度。先做一個統一的事件分發機制監聽微信的觸摸事件接口小結實際上是寫了一個微小的渲染引擎,便于擴展,容易理解學習。

前言

???????微信小游戲開放了好友關系鏈,使得小游戲的社交能力得到了加強,有助于增加游戲的活躍度。出于安全限制,只能在開放域使用關系鏈數據,但是開放域是獨立的工程,使得包體變大不小,所以筆者寫了一個簡單的渲染核心,既保留API一致,占用空間也很少。

節點樹結構

???????先模擬一個簡單的節點樹結構,以便使用父子這樣的結構代碼,符合一般的引擎風格。

function Node{
    this.x = 0
    this.y = 0
    ...  
}

通用方法定義:

Node.prototype ={
    setPosition(x, y) {
        this.x = x
        this.y = y
        this.isDirty = true
    },
    _updateWorldMatrix(){
        this.worldMatrix = this.parent ? matMul(this.localMatrix, this.parent.worldMatrix) : this.localMatrix
    }
    ...
}
渲染核心
function render(){
//重置轉換矩陣
    context.setTransform(1, 0, 0, 1, 0, 0);
    //清空畫布
    context.clearRect(0, 0, canvas.width, canvas.height);

    var draw = function (node, bUpdate) {
        var redraw = node.isDirty || bUpdate
        if (redraw) {
            //更新變動部分的矩陣
            node._updateWorldMatrix()
        }
        //Y軸 翻轉,向下平移一個畫布高度
        context.setTransform(1, 0, 0, -1, 0, canvas.height);

        if (node.type) {
            var t = node.worldMatrix
            context.transform(t[0], t[1], t[3], t[4], t[6], t[7])
            context.scale(1, -1);
        }
        if (node.bClip) {
            context.save()
            //剪裁
            ...
        }
        if (node.type == "sprite") {
            //精靈
            ...
        }
        if (node.type == "label") {
            //文字
            ...
        }
        node.children.forEach(v => draw(v, redraw))
        if (node.bClip) {
            //剪裁區域繪制完,恢復畫布
            context.restore();
        }
        node.isDirty = false
    }
    draw(scene)
}

以上是實際繪制的部分,比較多,所以只寫了大概的結構,詳細的請看源碼鏈接。
引擎2d渲染部分原理大概是這樣,看明白后,會對游戲引擎的核心部分有更加深入的理解。

觸摸事件響應

由于需要制作排行榜,有些需要滾動的,那么要監聽并分發觸摸事件,以響應用戶行為。
先做一個統一的事件分發機制:

function handleEvent(name, event) {
    var pt = event.changedTouches[0]
    scene.forEach(child=>{
        if (child.getBoundingBox().contains(pt)){
            if (child.listener[name]) {
                child.listener[name](pt)
            }
        }
    }
}

監聽微信的觸摸事件接口:

wx.onTouchStart(e => handleEvent("onTouchBegan", e))
wx.onTouchMove(e => handleEvent("onTouchMove", e))
wx.onTouchEnd(e => handleEvent("onTouchEnded", e))
wx.onTouchCancel(e => handleEvent("onTouchCancel", e))
小結

???????實際上是寫了一個微小的渲染引擎,便于擴展,容易理解學習。篇幅有限,不能展示所有的細節部分,有興趣的可以查看源碼渲染核心demo。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/106413.html

相關文章

  • 菜鳥| 微信小游好友排行教程

    摘要:今天我們分享的菜鳥文檔將介紹微信小游戲好友排行榜的制作過程,包括創建項目并發布微信開發者平臺添加小游戲打開開放域功能主域和開放域通訊,以及與原生的布局。 寫在前面:隨著越來越多的新人開始接觸白鷺引擎,創作屬于自己的游戲??紤]到初學者會遇到一些實際操作問題,我們近期整理推出菜鳥系列技術文檔,以便更好的讓這些開發者們快速上手,Egret大神們可以自動忽略此類內容。 今天我們分享的菜鳥文檔將...

    libxd 評論0 收藏0
  • 教你快速開發一個微信小游好友排行

    摘要:概述要做這個好友排行榜必然要有好友的戰績比分然后再做排序最后將數據呈現在上可以分為下面幾個步驟保存每個用戶的分數獲取好友列表并獲取好友的分數渲染排行榜保存每個用戶的分數保存每個用戶的分數需要調用微信的云存儲將用戶的分數持久化的存起來保存用戶 概述 ? 要做這個好友排行榜.必然要有好友的戰績比分,然后再做排序,最后將數據呈現在UI上 , 可以分為下面幾個步驟: 保存每個用戶的分數...

    Tychio 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<