javascript 如何将对象绘制到画布?

iqxoj9l9  于 2022-12-25  发布在  Java
关注(0)|答案(3)|浏览(122)

所以基本上我想通过类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>
vcudknz3

vcudknz31#

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>
6gpjuf90

6gpjuf902#

只需在使用该类之前初始化它。
另一点是,您不需要设置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>
fykwrbwg

fykwrbwg3#

你可能把ES5类和ES6混淆了。我不是JS方面的Maven,我需要自己在这个问题上做一些挖掘。下面是我的想法。我希望其他更专业的人能在这里提供帮助。你不能在ES6类对象中声明变量。记住类只能包含方法是很重要的。这在过去也让我犯过错误。这可能就是为什么你的画布上什么也没有得到。你得到任何错误消息吗?看看这些参考:ES6 class variable alternatives这是关于对象的一章,它显示了ES5和ES6类对象之间的区别。https://eloquentjavascript.net/06_object.html
希望这能有所帮助!

相关问题