簡體   English   中英

使用setInterval來回移動畫布圖像

[英]Move a canvas image back and forth using setInterval

我正在嘗試使用setInterval在畫布中來回移動圖像。 我一直在努力尋找解決方案,但無濟於事。 誰能找出問題所在? 這是我的代碼:

...

var img = new Image;
var url = ["sprite-right.png","sprite-left.png"];
var ctx2;

for (i=0; i<3; i++) {
    img.src = url[i];
}

img.onload = function() {
    start();
}

function start() {
    var canv2 = document.getElementById("canvas2");
    ctx2 = canv2.getContext("2d");
    var x = 50, y = 100;
    var direction = "right";
    var interval = setInterval(function() {
    if (direction == "right") {
        img.src=url[0];
        ctx2.clearRect(0, 0, ctx2.canvas.width, ctx2.canvas.height);
        ctx2.drawImage(img, x, y);
        x++;
        if (x>690) {
            direction = "left";
            } // end if
    } else if (direction == "left") {
        img.src=url[1];
        ctx2.clearRect(0, 0, ctx2.canvas.width, ctx2.canvas.height);
        ctx2.drawImage(img, x, y);
        x--;
        if (x<50) {
            direction = "right";
            } // end if
        } // end if
        },1); // end set interval
} // end function

您的代碼是無限循環的。

(正在工作的朋克)

每當您的圖片加載時,它都會運行“開始”功能; 但是,該函數會更改圖片網址,因此會再次加載,並運行“開始”功能,依此類推。

我通過制作多個圖像而不是僅使用一個圖像來運行您的代碼; 這樣,映像就不會不斷地重新加載。

值得注意的變化是增加了'img2'變量並重新排序了代碼; 其他一切都很好。

var img = new Image(),
img2 = new Image();
var url = ["https://www.google.com/images/srpr/logo11w.png","http://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Smiley.svg/220px-Smiley.svg.png"];
var ctx2;

function start() {
  console.log('whirrr');
    var canv2 = document.getElementById("canvas2");
    ctx2 = canv2.getContext("2d");
    var x = 50, y = 100;
    var direction = "right";
    var interval = setInterval(function() {
    if (direction == "right") {
        //img.src=url[0];
        ctx2.clearRect(0, 0, ctx2.canvas.width, ctx2.canvas.height);
        ctx2.drawImage(img, x, y);
        x++;
        if (x>690) {
            direction = "left";
            } // end if
    } else if (direction == "left") {
        //img.src=url[1];
        ctx2.clearRect(0, 0, ctx2.canvas.width, ctx2.canvas.height);
        ctx2.drawImage(img2, x, y);
        x--;
        if (x<50) {
            direction = "right";
            } // end if
        } // end if
        },1); // end set interval
} // end function

img.onload = function() {
    start();
}

//for (i=0; i<3; i++) {
//    img.src = url[i];
//}
img.src = url[0];
img2.src = url[1];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM