成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

int64 / 775人閱讀

摘要:前言微信小游戲開(kāi)放了好友關(guān)系鏈,使得小游戲的社交能力得到了加強(qiáng),有助于增加游戲的活躍度。先做一個(gè)統(tǒng)一的事件分發(fā)機(jī)制監(jiān)聽(tīng)微信的觸摸事件接口小結(jié)實(shí)際上是寫了一個(gè)微小的渲染引擎,便于擴(kuò)展,容易理解學(xué)習(xí)。

前言

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

節(jié)點(diǎn)樹結(jié)構(gòu)

???????先模擬一個(gè)簡(jiǎn)單的節(jié)點(diǎn)樹結(jié)構(gòu),以便使用父子這樣的結(jié)構(gòu)代碼,符合一般的引擎風(fēng)格。

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(){
//重置轉(zhuǎn)換矩陣
    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) {
            //更新變動(dòng)部分的矩陣
            node._updateWorldMatrix()
        }
        //Y軸 翻轉(zhuǎn),向下平移一個(gè)畫布高度
        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) {
            //剪裁區(qū)域繪制完,恢復(fù)畫布
            context.restore();
        }
        node.isDirty = false
    }
    draw(scene)
}

以上是實(shí)際繪制的部分,比較多,所以只寫了大概的結(jié)構(gòu),詳細(xì)的請(qǐng)看源碼鏈接。
引擎2d渲染部分原理大概是這樣,看明白后,會(huì)對(duì)游戲引擎的核心部分有更加深入的理解。

觸摸事件響應(yīng)

由于需要制作排行榜,有些需要滾動(dòng)的,那么要監(jiān)聽(tīng)并分發(fā)觸摸事件,以響應(yīng)用戶行為。
先做一個(gè)統(tǒng)一的事件分發(fā)機(jī)制:

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)
            }
        }
    }
}

監(jiān)聽(tīng)微信的觸摸事件接口:

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

???????實(shí)際上是寫了一個(gè)微小的渲染引擎,便于擴(kuò)展,容易理解學(xué)習(xí)。篇幅有限,不能展示所有的細(xì)節(jié)部分,有興趣的可以查看源碼渲染核心demo。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106413.html

相關(guān)文章

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

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

    libxd 評(píng)論0 收藏0
  • 教你快速開(kāi)發(fā)一個(gè)微信小游好友排行

    摘要:概述要做這個(gè)好友排行榜必然要有好友的戰(zhàn)績(jī)比分然后再做排序最后將數(shù)據(jù)呈現(xiàn)在上可以分為下面幾個(gè)步驟保存每個(gè)用戶的分?jǐn)?shù)獲取好友列表并獲取好友的分?jǐn)?shù)渲染排行榜保存每個(gè)用戶的分?jǐn)?shù)保存每個(gè)用戶的分?jǐn)?shù)需要調(diào)用微信的云存儲(chǔ)將用戶的分?jǐn)?shù)持久化的存起來(lái)保存用戶 概述 ? 要做這個(gè)好友排行榜.必然要有好友的戰(zhàn)績(jī)比分,然后再做排序,最后將數(shù)據(jù)呈現(xiàn)在UI上 , 可以分為下面幾個(gè)步驟: 保存每個(gè)用戶的分?jǐn)?shù)...

    Tychio 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<