所以基本上,我想通过类GameObject
使对象出现在简单的HTML画布上,但我无法完成它。该代码可以很好地编译,但是它不会出现在屏幕上。我认为它与变量ctx
有关,但我不太确定。
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
square = new GameObject(20, 40, 50, 50, "blue");
square.drawObject();
class GameObject {
constructor(x, y, w, h, color) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.color = color;
}
drawObject() {
ctx.rect(this.x, this.y, this.w, this.h);
ctx.fillStyle = this.color;
ctx.fill();
}
}
<style>
* { padding: 0; margin: 0; }
canvas { background: #eee; display: block; margin: 0 auto; }
</style>
<canvas id="myCanvas" width="480" height="320"></canvas>
答案 0 :(得分:2)
在定义JS类之前,不能使用它们。如果将正方形游戏对象的初始化移动到GameObject
类定义下,它将起作用:
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
class GameObject {
constructor(x, y, w, h, color) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.color = color;
}
drawObject() {
ctx.rect(this.x, this.y, this.w, this.h);
ctx.fillStyle = this.color;
ctx.fill();
}
}
square = new GameObject(20, 40, 50, 50, "blue");
square.drawObject();
* { padding: 0; margin: 0; }
canvas { background: #eee; display: block; margin: 0 auto; }
<canvas id="myCanvas" width="480" height="320"></canvas>
答案 1 :(得分:0)
只需在使用该类之前对其进行初始化。
另一点是,您不需要设置x,y,w,h,color,因为您是在构造函数中进行设置的。
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
class GameObject {
constructor(x, y, w, h, color) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.color = color;
}
drawObject() {
ctx.rect(this.x, this.y, this.w, this.h);
ctx.fillStyle = this.color;
ctx.fill();
}
}
const square = new GameObject(20, 40, 50, 50, "blue");
square.drawObject();
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test</title>
<style>
* {
padding: 0;
margin: 0;
}
canvas {
background: #eee;
display: block;
margin: 0 auto;
}
</style>
</head>
<body>
<canvas id="myCanvas" width="480" height="320"></canvas>
<script src="index.js"></script>
</body>
</html>
答案 2 :(得分:0)
您可能会将ES5类与ES6混淆。我不是JS方面的专家,因此我需要对此主题进行一些深入的研究。这是我想出的。而且,我希望其他具有更多专业知识的人可以加入并在这里提供帮助。您不能在ES6类对象中声明变量。请记住,类只能包含方法,这一点很重要。过去,这也使我震惊。这可能是您在画布上什么也没得到的原因。您收到任何错误消息吗?查看以下参考: ES6 class variable alternatives 这是一章关于对象,它显示了ES5和ES6类对象之间的区别。 https://eloquentjavascript.net/06_object.html
我希望这会有所帮助!