Javascript:在 Canvas 上 move 对象(尝试学习面向对象编程)

标签 javascript html object canvas move

所以基本上我想制作一个简单的贪吃蛇游戏,但我已经陷入了 move 部分。

如果我制作一个按钮 onclick = "snake.show()"并且当我单击该按钮时,矩形会 move ,则此代码有效。 (snake.show()也在body onload中)

    var width = 800;
    var height = 400;
    var x = width/2;
    var y = height/2;

    class Snake{
        show(){
            var c = document.getElementById("canvas");
            var ctx = c.getContext("2d");
            ctx.rect(x, y, 20, 5);
            ctx.fill();
            x++;
        }
        //update(){}
    }

    let snake = new Snake();

但我不想做这样的事情:

    var width = 800;
    var height = 400;
    var x = width/2;
    var y = height/2;

    class Snake{
        show(){
            var c = document.getElementById("canvas");
            var ctx = c.getContext("2d");
            ctx.rect(x, y, 20, 5);
            ctx.fill();
        }
        update(){
            x++;
        }
    }

如果我需要 move 矩形,请调用 update() 函数,但这不起作用。抱歉我的英语不好,感谢您的建议和帮助!

最佳答案

  1. 将 Canvas 和上下文声明为全局变量(仅一次)。
  2. 一个类需要一个构造方法。
  3. 我正在更新并再次显示右箭头上的蛇。

希望对您有所帮助。

const c = document.querySelector("canvas");
const ctx = c.getContext("2d");

const width = (c.width = 800);
const height = (c.height = 400);

class Snake {
  constructor() {
    this.x = width / 2;
    this.y = height / 2;
  }
  show() {
    ctx.beginPath();
    ctx.rect(this.x, this.y, 20, 5);
    ctx.fill();
  }
  update() {
    this.x+=20;
  }
}

let snake = new Snake();
snake.show();

window.addEventListener("keydown", e => {
  
  if (e.keyCode == 39) {
    ctx.clearRect(0,0,width,height);
    snake.update();
    snake.show();
  }
});
canvas{border:1px solid}
<canvas id="canvas"></canvas>

关于Javascript:在 Canvas 上 move 对象(尝试学习面向对象编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54866908/

相关文章:

javascript - document.getElementById 类适用于整个数组而不是每个元素

javascript - 不允许导航重复导航到当前位置 ("/search")

javascript - 除了打开的元素外,在任何地方都进行点击时如何关闭元素?

html - 某些计算机上的导航栏重叠

javascript - 在单选按钮更改时

对象外的JavaScript函数封装

arrays - Swift - 按另一个数组的属性对对象数组进行排序

javascript - 如何获取数组中项目的索引?

html - 在 Bootstrap 中相邻的 div 之间创建间隙

java - 在 Java 中创建对象的正确方法是什么?