我正在尝试在相同高度的画布中显示多个管道,但即使在使用for循环后,它显示的是单个管道而不是很多
<script>
var tryCanvas = document.getElementById("myCanvas");
var c = tryCanvas.getContext("2d");
var myCall = [];
function Squares() {
for(var i =0; i < 10; i++){
this.x = Math.random()* tryCanvas.clientWidth;
this.y = 0;
this.w = 20;
this.h = 60;
this.counter = 0;
this.draw = function() {
c.beginPath();
c.rect(this.x, this.y, this.w, this.h)
c.fill();
}
}
this.update = function() {
if(this.x < 0){
this.x = 0;
}
this.x -= 1;
this.draw();
}
}
var holder = new Squares;
setInterval(callFun, 10);
function callFun() {
c.clearRect(0,0,tryCanvas.clientWidth, tryCanvas.clientHeight);
holder.update();
}
</script>
如果我在数组中推送构造函数,它在画布和控制台中没有显示任何内容,它给出了undefined或NaN。 但如果我这样做而没有“这个”它产生的数量。 我在这里做错了什么?
答案 0 :(得分:2)
已更新,可沿屏幕移动栏
请参阅此工作示例: https://codepen.io/bkfarns/pen/braWQB?editors=1010
This.draw只会使用for循环的最后一次迭代中的值创建。
同样作为副节点,通常代替new Squares
而不是像new Squares()
那样调用构造函数。当你调用构造函数时,你正在调用一个方法。
但我认为以下代码可以解决您的问题。试试吧:
<body>
<canvas id="myCanvas"/>
</body>
<script>
var tryCanvas = document.getElementById("myCanvas");
var c = tryCanvas.getContext("2d");
var myCall = [];
function Squares() {
this.draw = function(xOffset) {
for(var i =0; i < 10; i++){
this.x = (i * xOffset) + (5*i)//Math.random()* tryCanvas.clientWidth;
this.y = 0;
this.w = 20;
this.h = 60;
c.beginPath();
c.rect(this.x, this.y, this.w, this.h)
c.fill();
}
}
}
var holder = new Squares();
var xOffset = 20;
setInterval(function() {
c.clearRect(0,0,tryCanvas.clientWidth, tryCanvas.clientHeight);
holder.draw(xOffset)
xOffset--;
}, 1000)
</script>