V-Play入門手冊3-如何編寫高效的代碼?

其中最酷的一個功能確定是QML的屬性綁定.express

From the Qt-Documentation: This is a core feature of QML that allows objects to automatically update their properties in response to changing attributes in other objects or the occurrence of some external event. …the property's value is automatically updated by the QML engine whenever the value of the evaluated expression changes性能

換句話說,這是很是好玩的(好玩個鬼),接下來我將用一個簡短的例子來告訴你這究竟是什麼意思, 首先上一個木有屬性綁定的小項目:ui

import VPlay 2.0
import QtQuick 2.0

GameWindow {
    Scene{
        Text{
            id: mouseXText
            anchors.centerIn: parent
            color: "blue"
            visible: false
        }
        MouseArea{
            id: mouseArea
            anchors.fill: parent
            onMouseXChanged: {
                mouseXText.text = qsTr("鼠標被按下:") + mouseX
                mouseXText.color = mouseX > 240 ? "red" : "blue"
            }
            onPressed: mouseXText.visible = true
            onReleased: mouseXText.visible = false
        }
    }
}

在這個小項目場景中,每當你鼠標按下的時候,將打印出鼠標當前的X軸座標.
此外,你能夠試着移動鼠標再按下,並查看鼠標當前的X軸座標.
若是鼠標的的X軸座標大於240(場景的一半),則文本顏色發生變化.lua

當考慮更大的項目時,例如文本組件和MouseArea的代碼不相鄰的狀況下,
須要作一些搜索並找到改變文本組件的對應屬性,爲此會形成一些沒必要要的操做,間接的也增長了開發難度.code

接下來咱們用屬性綁定來改進這個小項目:遊戲

import VPlay 2.0
import QtQuick 2.0

GameWindow {
    Scene{
        Text{
            id: mouseXText
            text: qsTr("鼠標被按下:") + mouseArea.mouseX
            anchors.centerIn: parent
            color: mouseArea.mouseX > 240 ? "red" : "blue"
            visible: mouseArea.pressed
        }
        MouseArea{
            id: mouseArea
            anchors.fill: parent
        }
    }
}

在這個改進的項目中,咱們不單單是減小了幾行代碼,
當咱們移動鼠標的時候,文本組件自身也在隨之改變,
這使得代碼的行爲執行看起來很是透徹明瞭,尤爲是在複雜的大項目中.事件

看一下文本組件的文本屬性:
每當鼠標的X軸座標發生改變時,產生的影響是文本組件得到通知來改變和更新文本值.
能夠看到顏色屬性也受影響,你能夠試試任何JavaScript表達式,也可使用多個變量,其中任意一個改變,其餘的都會受影響.
最重要的是,經過強大的信號與槽的來實現屬性綁定,意味着完整的C++級別的性能.ip

哇-咱們只是使代碼更短,更易於理解也更快! 假如你不相信我,我還有一件玩意給你.
V-Play也可使用了Qt Creator的一個很酷的功能,你能夠分析你的項目來查找須要改進性能的代碼.開發

##分析你的遊戲或應用程序it

  1. Qt Creator的左手邊選擇分析分析按鈕
  2. 點擊開始按鈕點擊開始
  3. 運行你的遊戲或應用程序一段時間
  4. 點擊中止按鈕點擊中止在開始按鈕下面(經過這個按鈕能夠中止你的遊戲或應用程序)
  5. 查看分析的結果(你應該在這個表中右鍵打開擴展事件統計)

上面2個小項目的分析結果以下:
第一個小項目執行響應的平均時間爲778微秒左右,最長時間爲1毫秒左右 分析結果1

第二個小項目執行響應的平均時間422微秒左右,最長時間爲0.7毫秒左右 分析結果2
在大的項目中這些微小的性能增速將會增長至關可觀的性能,因此請不要低估和忽略它們.

##如今咱們繼續
咱們剛剛品味到了屬性綁定的簡單和效率
你能夠看看這個例子:QML Introduction,展現了屬性綁定的更多強大之處. 若是你在開發遇到其餘任何問題,記得試試分析你的應用程序來查找更多的瓶頸.

相關文章
相關標籤/搜索