0

問題があります。ページで元に戻すをクリックすると、キャンバスのサイズが小さくなりますか? ページに移動し、いくつか描画し、[元に戻す] をクリックして、何も表示されなくなるまで繰り返すと、問題が表示されます。すべてが画像のサイズ変更のように動きますか? currentState 変数に何か問題があるに違いないと思いますが、コードは頭の中で理にかなっているので、何が問題なのかわかりません。

http://www.taffatech.com/Paint.html これが私のコードです:

    function clearCanvas()
    {
    ctx.clearRect(0,0,canvasWidth,canvasHeight);

    }
   Stack1 = new Stack();
    ///////////////////

    function Stack() {
    var currentState = -1;
    var maxStates = 10;
     var stateArray = [];



currentState++;
var image = new Image();
image.id = "pic";
image.src = canvas.toDataURL();
stateArray.push(image);




    this.add = function() {
    currentState++;
var image = new Image();
image.id = "pic";
image.src = canvas.toDataURL();
stateArray.push(image);

    }


    this.undo = function () {



    if(currentState > 0)
     {
    currentState--;

      //stateArray.pop();
      clearCanvas();
     var image = stateArray[currentState];
      ctx.drawImage(image,0,0);
      }


    }

    this.redo = function () {

    alert("Unfinished");
    //maybe have another array?



    }
} 
4

1 に答える 1

0

元に戻すがクリックされたときに現在のフレームを配列にポップする必要がありました。そうしないと、配列が必要なフレームの後に 1 つ追加されるためです。

 this.undo = function () {




    if(currentState < 0)
    {
    currentState = 0;
    clearCanvas();
    }
    else(curre

if(currentState >= 0)
 {

 stateArray.pop();
currentState--;


  clearCanvas();
 var image = stateArray[currentState];
  ctx.drawImage(image,0,0);
  }


}

また、やり直し機能については、ポップされたフレームを新しい配列に追加し、やり直しをクリックしたときにそれらを使用します。ただし、少しトリッキーになる可能性があります。

于 2013-06-18T19:43:23.660 に答える