2016-10-02 4 views
0

このqmlファイルは、私のメインウィンドウファイルの1つに実装されています。しかし、アニメーションは表示されません。これをキャンバスアニメーションの教科書のチュートリアルからコピーしたので、構文に間違いがないと確信していました。私はデバッグ時にエラーはありませんが、アニメーションの一部を見ることはできません。何か案は?Qml Canvas Animation Error

HeartBeat.qml

Canvas{ 
id: canvas 
visible: true 

width: 600 
height: 300 

property int lineWidth: 2 
property var points: [] 
property real arg: -Math.PI 

Timer{ 
    interval: 10 
    repeat: true 
    running: true 
    onTriggered: { 
     arg += Math.PI/180 
     while(arg >= Math.PI) arg -= 2*Math.PI 
    } 
} 

onArgChanged: { 
    points.push(func(arg)) 
    points = points.slice(-canvas.width) 
    canvas.requestPaint() 
} 

function func(argument){ 
    var a=(2*Math.PI/10); var b=4*Math/5 
    return Math.sin(20*argument) * (
       Math.exp(-Math.pow(argument/a, 2)) + 
       Math.exp(-Math.pow((argument-b)/a,2)) + 
       Math.exp(-Math.pow((argument+b)/a, 2)) 
       ) 
} 

onPaint:{ 
    var ctx = canvas.getContext("2d") 
    ctx.reset() 
    ctx.clearRect(0, 0, canvas.width, canvas.height) 
    var pointsToDraw = points.slice(-canvas.width) 
    ctx.translate(0, canvas.height/2) 
    ctx.beginPath() 
    ctx.moveTo(0, -pointsToDraw[0]*canvas.height/2) 
    for(var i=1; i<pointsToDraw.length; i++) 
     ctx.lineTo(i, -pointsToDraw[i]*canvas.height/2) 
    ctx.lineWidth = canvas.lineWidth 
    ctx.stroke() 
} 
} 

Main.qml

Item{ 
    id: container 
    x: 530 
    y: 542 
    width: 600 
    height: 300 
HeartBeat{ 
    id: heartBeatMonitor 
} 
} 

私は他のキャンバスのアニメーションで何の問題もない...それはちょうどこのアニメーションです。

答えて

0

ロギングを追加すると、初期のデバッグに適しています。

onArgChanged: { points.push(func(arg)) points = points.slice(-canvas.width) console.log(points); canvas.requestPaint() }

その後、私はその配列がNaNでの抽選で満たされている参照してください。それから私はvar b=4*Math/5を見て、Mathの後にいくつかの文字が間違っているようです。私はそこに何が印刷されると予想されていたのか分かりません。

男、あなたはより良い教科書を見つけるべきです!

+0

ありがとうございます。問題はb = 4 * Math/5となり、b = 4 * Math.PI/5に変更され、正しいアニメーションが得られました。この教科書は非常に素朴な骨であり、JavaScriptの経験を前提としています。これはいつもC++で働いていた人にとって迷惑です。 – Gepard

+0

何かの理由で教科書には、これを見てから重要なロギングは決して論じられません! – Gepard

+0

問題が解決したら、それを受け入れてください。 – Kakadu