Javascript 为什么赢了';我的提特罗米诺作品不是每秒钟都从画布上掉下来吗?

Javascript 为什么赢了';我的提特罗米诺作品不是每秒钟都从画布上掉下来吗?,javascript,Javascript,我在做俄罗斯方块游戏。我能把这块画到画布上。现在我试着让它每一秒都倒下。我在网上发现的第一件事是clearRect()重置画布。但这不起作用,我不认为这是核心问题。然后,我决定在这样画之前,循环并重新绘制整个电路板空白(startgame()每秒运行一次) 我认为这足以让这件作品倒下。 首先,我重新画了黑板。我画了一块。第三,我改变工件位置。这是怎么回事 /----我在另一个名为blocks.js的文件中有这些tetrominos---- 常数J=[[1,0,0], [1, 1, 1], [0

我在做俄罗斯方块游戏。我能把这块画到画布上。现在我试着让它每一秒都倒下。我在网上发现的第一件事是clearRect()重置画布。但这不起作用,我不认为这是核心问题。然后,我决定在这样画之前,循环并重新绘制整个电路板空白(startgame()每秒运行一次)

我认为这足以让这件作品倒下。 首先,我重新画了黑板。我画了一块。第三,我改变工件位置。这是怎么回事

/----我在另一个名为blocks.js的文件中有这些tetrominos----
常数J=[[1,0,0],
[1, 1, 1],
[0, 0, 0]],
[[0, 1, 1],
[0, 1, 0],
[0, 1, 0]], 
[[0, 0, 0],
[1, 1, 1],
[0, 0, 1]],
[[0, 0, 1],
[0, 0, 1],
[0, 1, 1]]]
常数L=[[0,0,1],
[1, 1, 1],
[0, 0, 0]],
[[0, 1, 0],
[0, 1, 0],
[0, 1, 1]], 
[[0, 0, 0],
[1, 1, 1],
[1, 0, 0]], 
[[1, 1, 0],
[0, 1, 0],
[0, 1, 0]]]
常数O=[[1,1],
[1, 1]]]           
常数I=[[0,0,0,0],
[1, 1, 1, 1],
[0, 0, 0, 0],
[0, 0, 0, 0]],
[[0, 0, 1, 0],
[0, 0, 1, 0],
[0, 0, 1, 0],
[0, 0, 1, 0]], 
[[0, 0, 0, 0],
[0, 0, 0, 0],
[1, 1, 1, 1],
[0, 0, 0, 0]], 
[[0, 1, 0, 0],
[0, 1, 0, 0],
[0, 1, 0, 0],
[0, 1, 0, 0]]] 
常数S=[[0,1,1],
[1, 1, 0],
[0, 0, 0]],
[[0, 1, 0],
[0, 1, 1],
[0, 0, 1]]] 
常数T=[[0,1,0],
[1, 1, 1],
[0, 0, 0]],
[[0, 1, 0],
[0, 1, 1],
[0, 1, 0]],
[[0, 0, 0],
[1, 1, 1],
[0, 1, 0]],
[[0, 1, 0],
[1, 1, 0],
[0, 1, 0]]] 
常数Z=[[1,1,0],
[0, 1, 1],
[0, 0, 0]],
[[0, 0, 1],
[0, 1, 1],
[0, 1, 0]]]
const cvs=document.querySelector(“#canvas”);
const ctx=cvs.getContext('2d');
常数单位=35;
//从blocks.js收集块并指定颜色
常数块=[[J,'蓝色']],
[L,‘橙色’],
[O,‘黄色’],
[I,‘青色’],
[S,‘limegreen’],
[T,‘紫色’],
[Z,‘红色’]]
//创建游戏变量
设game=setInterval(startGame,1000);
//抓取一个随机块
设r=Math.floor(Math.random()*6)+1;
//绘图板
功能绘图板(){
for(设y=0;y<20;y++){
for(设x=0;x<15;x++){
ctx.strokeStyle=‘白色’;
ctx.fillStyle=“黑色”;
ctx.冲程(x*单位,y*单位,单位,单位);
ctx.fillRect(x*单位,y*单位,单位,单位);
}
}
}
//创建块对象
类块{
构造函数(块、颜色){
this.block=块;
这个颜色=颜色;
this.blockPosition=块[0];
这个.x=0;
这个。y=0;
}
drawBlock(){
for(设r=0;r
body,html{
轮廓:1px纯红;
保证金:0;
填充:0;
}
身体{
高度:100vh;
显示器:flex;
证明内容:中心;
对齐项目:居中;
背景色:暗灰色;
}
帆布{
背景色:黑色;
}

俄罗斯方块

有时当一个问题起初看起来很容易,但后来变成了一个集群。。你走错了路。。哦,我也在自言自语

现在

var lim=[425]//所有容器的容器长度为-50
var elems=document.getElementsByClassName('容器')
var toRun=[真,真,真,真,真,真,真,真,真,真]
功能块(一){
var x=document.createElement('div')
x、 className=“动画”
elems[i].appendChild(x)//如果您希望记录每个块(我建议您这样做,对于包括其位置在内的任何计算,请使用外部对象替换x(该对象将具有您需要的任何数据所需的任何构造))
if(!toRun[i]){return;}
var pos=0;toRun[i]=false
变量id=setInterval(()=>{
如果(位置>=lim[i]){
lim[i]=55;清除间隔(id)
if(lim[i]{//块将生成,直到板已满
var j=Math.floor(Math.random()*lim.length)
if(toRun[j]){spawnBlock(j)}
else if(lim.filter(a=>{returna>=30}).length==0){
console.log(“已成功填充整个板”)
净空间隔(s)
}
},1000)
//唯一被“微调”的数字是425,55,30
//425大致为容器高度-动画高度
//55大致是一行中块之间的间距
//30大概是lim[i]被填充时的值
//s间隔中的else if条件是电路板是否已填充的条件
//现在,如果你想让产卵器一次只射出一个(而不是一次只射出一个网格),你可以修改间隔来读取你设计中的一些全局变量
function startGame() {
    drawBoard();
    block.drawBlock();
    block.y += unit;
}