javascript - 在 Canvas 内移动矩形

标签 javascript jquery canvas

我的代码:

 $(document).ready(function () {

    var canvas,
    ctx,
    playerimage,
    x,
    y,
    speed = 5, //speed for the player to move at
    width = 10, //width of the player
    height = 10; //height of the player

    function init() {
        canvas = $("#Mycanvas");
        ctx = canvas[0].getContext('2d');
        x = canvas.width() / 2;
        y = canvas.height() / 2;

         playerimage = new Image();
         playerimage.src = "ninja.png"; //path to the image to use for the player
         window.addEventListener("keydown", update, false);
        //canvas.addEventListener("keypress", update);
         render();
    }

    $(window).load(function () { init(); });

    function update(event) {
        if (event.keyCode == 38) {
            y -= speed; //going up
        }
        if (event.keyCode == 40) {
            y += speed; //going down
        }
        if (event.keyCode == 37) {
            x -= speed; //going left
        }
        if (event.keyCode == 39) {
            x += speed; //going right
        }
        render();
    }

    function render() {
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        ctx.fillRect(x, y, width, height);


    }
});

我的jsfiddle:http://jsfiddle.net/BLpGH/14/

正如你所看到的,矩形没有移动,而是看起来像画一条线而不是移动,我不希望它画一条线,我该怎么做?

最佳答案

工作版本,以及 demo here

我将 clearRect 移至更新函数,以便它可以在值更改之前运行。 我还添加了 if 条件,以便 img 不会脱离 canvas

   function update(event) {
       if (x + 20 > canvas.width() && event.keyCode == 39) {
           ctx.clearRect(x, y, width, height);
           x = canvas.width() - 15;
           render();
           return false;
       }
       if (x - 10 < 0 && event.keyCode == 37) {
           ctx.clearRect(x, y, width, height);
           x = 5;
           render();
           return false;
       }

       if (y - 10 < 0 && event.keyCode == 38) {
           ctx.clearRect(x, y, width, height);
           y = 5;
           render();
           return false;
       }
       if (y + 20 > canvas.height() && event.keyCode == 40) {
           ctx.clearRect(x, y, width, height);
           y = canvas.height() - 15;
           render();
           return false;
       }

       ctx.clearRect(x, y, width, height);
       if (event.keyCode == 38) {
           y -= speed; //going up
       }
       if (event.keyCode == 40) {
           y += speed; //going down
       }
       if (event.keyCode == 37) {
           x -= speed; //going left
       }
       if (event.keyCode == 39) {
           x += speed; //going right
       }
       render();
   }

   function render() {
       ctx.fillRect(x, y, width, height);
   }

我使用x + 20,因为您定义的正方形是(宽度= 10,//播放器的宽度)。因此,如果您靠近 Canvas 端,我想保证它是 Canvas - 播放器的宽度,但因为 x 定义了正方形/播放器图像的左侧像素,所以我添加了 2x 10。在相反的方向上,这不是必需的,所以只要 1x 宽度就足够了。与 y 相同。

关于javascript - 在 Canvas 内移动矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17882680/

相关文章:

javascript - 使用鼠标指针简单地交换水平和垂直滚动

javascript - 如何使用canvas将多张图像转换为base64

javascript - 尝试通过 javascript 调用 appcode 函数

javascript - Javascript/jQuery/etc 中测量耗时/触发事件的方法

javascript - 正在加载自定义论坛帖子 : php echo vs. javascript.createElement

html - 你可以使用 canvas.getContext ('3d' )吗?如果是,如何?

javascript - react .js : batching setState to ensure only one DOM layout/paint

jquery DatePicker 完成按钮

javascript - HTML5 Canvas : find out if click co-ordinates are inside a given rectangle

html - 将 Canvas 元素转换为图像并存储在数据库中