1

よろしければこちらのページをご覧ください

パネル上の大きなボタンの 1 つをクリックして、マウスを y 軸上で動かしてみてください。ボタンが回転し始めます。さて、マウスを離してもう一度クリックしてください。

ボタンの回転に関連するコード スニペットを次に示します。描画ループで実行されるコードは 30ms ごとに呼び出されることに注意してください。

// method
Button.prototype.Rotate = function(yDrag){
this.rotation =  - (yDrag - this.rotationYClick) / 80 
}

// draw loop
function drawLoop() {

if (buttons[n].roating == true && mousePressed == true)
buttons[n].Rotate(mousePosition_y)
else
buttons[n].roating = false
} // end draw loop

// fired ONLY ONCE when mouse is clicked
function mouseDown() {
buttons[n].roating = true
buttons[n].rotationYClick = mousePosition_y
}

問題がこれらの行にあると確信しているため、ほとんどのコードを投稿することを意図的に避けました。

コードの説明: ボタンをクリックすると、マウスの位置がrotationYClickclass の変数に格納されますButton。マウスをドラッグしている間、マウスの位置は保存されている値と常に比較されます。クリックしたポイントから現在のマウスの位置までの距離によって、ボタンの回転量が決まります。問題は、もう一度クリックすると回転がゼロに戻ることです。の解き方?!

メソッドを変更して失敗した試みの1つを次に示します

// method
Button.prototype.Rotate = function(yDrag){
this.rotation +=  - (yDrag - this.rotationYClick) / 80 
}

どうもありがとう!

4

1 に答える 1

1

this.rotationを設定する場所。=の代わりに+=を使用します

問題は、ボタンの現在の回転角度を考慮せずに、各ドラッグの回転を再評価することです。

編集

わかりました。それほど単純はありません:)基本的に2つの変数を保持する必要があります。1つは元の回転角度用で、もう1つは現在の回転を表します。したがって、次のようになります。

this.rotation = this._originalRotation - ((yDrag-this.rotationYClick)/80);

そして次のようにmouseDownなります:

// fired ONLY ONCE when mouse is clicked
function mouseDown() {
    buttons[n].roating = true
    buttons[n].rotationYClick = mousePosition_y
    buttons[n]._originalRotation = this.rotation;
}
于 2012-10-07T00:13:06.867 に答える