2014-11-25 70 views
2

在我的QML遊戲中,我有一些水面上方有波浪。我需要一個想法如何動畫波浪。當波浪起伏時,我只需要一些簡單的動畫。我試過動畫SVGImageAnimatedImage。什麼都沒有由於顏色限制,GIF看起來不太好。可能是一些圖形效果或精靈?任何想法將不勝感激!QML - 需要想法如何動畫波

回答

4

以下代碼通過使用 sine wave公式爲圖像創建連續波動畫。

Image { 
    id: sourceImg 
    anchors.fill: parent 
    source: "../images/src.png" 
    visible: false 
} 

ShaderEffect { 
    anchors.fill: parent 
    property variant source: sourceImg 
    property real frequency: 1 
    property real amplitude: 0.1 
    property real time: 0.0 
    NumberAnimation on time { 
     from: 0; to: Math.PI*2; duration: 10000; loops: Animation.Infinite 
    } 
    fragmentShader: " 
        varying highp vec2 qt_TexCoord0; 
        uniform sampler2D source; 
        uniform lowp float qt_Opacity; 
        uniform highp float frequency; 
        uniform highp float amplitude; 
        uniform highp float time; 
        void main() { 
         highp vec2 texCoord = qt_TexCoord0; 
         texCoord.y = amplitude * sin(time * frequency + texCoord.x * 6.283185) + texCoord.y; 
         gl_FragColor = texture2D(source, texCoord) * qt_Opacity; 
        }" 
} 
+0

謝謝@Blastings,這是接近我的目標。我只需要採用它來平鋪圖像,它仍然不適合我。你不覺得着色器會導致CPU過載嗎? – folibis 2014-11-25 23:01:14

+0

所以你有幾個圖像排列在瓷磚網格? 據我所知,QML着色器代碼應該在GPU上運行,而不是在CPU上運行。 – Blastings 2014-11-26 07:58:01