在移动其他元素时将元素的位置保存在 canvas 中
Save position of elements in canvas while is moving others
我开始学习 Html5 canvas 一个简单的游戏,俄罗斯方块。当这个棋子到达canvas的底部时,我需要保存canvas中棋子的位置,然后留在那里。然后创建另一块并将其移动到底部。但是当第一块到达 canvas 的底部时,它消失了,新的一块出现在顶部并开始下降。为什么第一块不留在底部?
这是代码:
var canvas;
var context;
var _this;
var pantalla = {
width: 325,
height: 650,
figuras: []
}
对象"pantalla"是一个对象,有屏幕的属性,宽度,高度,画的块
function Game(dificulty){
this.time = dificulty;
this.initGame = function(){
canvas = document.getElementById("canvas");
context = canvas.getContext("2d");
//context = canvas.getContext("3d");
_this = this;
figura = _this.generarFigura();
interval = setInterval(function(){_this.loop()},_this.time);
};
"initGame"方法创建上下文并创建第一个片段然后启动循环。
this.loop = function(){
figura.update();
figura.paint();
if((figura.y)>=pantalla.height){
clearInterval(interval);
figura = _this.generarFigura();
interval = setInterval(function(){_this.loop()},_this.time);
}
};
方法"loop"迭代直到片在canvas的底部,然后停止迭代清除间隔,创建一个新片并再次开始间隔。
this.generarFigura = function(){
var numeroFigura = Math.floor(Math.random() * 0);
var numeroPosFigura = Math.floor(Math.random() * 10);
var figurasPosibles = ['i','j','t','o','z','s','l'];
var figura;
switch(figurasPosibles[numeroFigura]){
case 'i': figura = new Figura('i'); break;
case 'j': break;
case 't': break;
case 'o': break;
case 'z': break;
case 's': break;
case 'l': break;
}
pantalla.figuras[pantalla.figuras.length] = figura;
//Si sale un numero que colocando la posicion se salga de la pantalla
//No me complico y la dejo en la (0,0)
if(((numeroPosFigura * 32.5) + figura.width) <= pantalla.width){
figura.x = 32.5 * numeroPosFigura;
}
figura.paint();
return figura;
};
方法"generarFigura"随机选择一块并添加到对象屏幕(pantalla)的块列表中。然后这件作品是在上下文中绘制的。
function Figura(tipo){
this.x = 0;
this.y = 0;
switch(tipo){
case 'i': this.width = 162.5; this.height = 32.5;
this.update = function(direccion){
context.clearRect(this.x,this.y,this.width,this.height);
if(direccion){
if(direccion=='derecha' && (this.x+this.width)<pantalla.width){
this.x += 32.5;
}else if(direccion=='izquierda' && this.x>0){
this.x -= 32.5;
}
}else{//Si no se mueve en ninguna dirección la figura baja
this.y += 32.5;
}
};
this.paint = function(){
context.beginPath();
context.canvas.width = context.canvas.width;
context.fillRect(this.x,this.y,this.width,this.height);
context.stroke();
}; break;
}
};
每个棋子的"update"方法删除棋子的旧位置并更新参数(如果"direccion"存在则将棋子向右或向左移动)。
"paint" 方法在指定的参数中绘制这块。
有人可以帮助我吗?谢谢。
您的 update() 函数仍在移动棋子,即使它们已到达底部。解决方法是仅在未到达底部时才移动棋子:
// in update()
if(this.y<pantalla.height-this.height){
this.y+=32.5;
// adjust if the piece is slightly below the bottom
if(this.y>pantally.height-this.height{
this.y=pantally.height-this.height;
}
}
顺便说一句,您的 Math.floor(Math.random() * 0)
将始终为零。
祝你玩俄罗斯方块游戏好运!
我开始学习 Html5 canvas 一个简单的游戏,俄罗斯方块。当这个棋子到达canvas的底部时,我需要保存canvas中棋子的位置,然后留在那里。然后创建另一块并将其移动到底部。但是当第一块到达 canvas 的底部时,它消失了,新的一块出现在顶部并开始下降。为什么第一块不留在底部? 这是代码:
var canvas;
var context;
var _this;
var pantalla = {
width: 325,
height: 650,
figuras: []
}
对象"pantalla"是一个对象,有屏幕的属性,宽度,高度,画的块
function Game(dificulty){
this.time = dificulty;
this.initGame = function(){
canvas = document.getElementById("canvas");
context = canvas.getContext("2d");
//context = canvas.getContext("3d");
_this = this;
figura = _this.generarFigura();
interval = setInterval(function(){_this.loop()},_this.time);
};
"initGame"方法创建上下文并创建第一个片段然后启动循环。
this.loop = function(){
figura.update();
figura.paint();
if((figura.y)>=pantalla.height){
clearInterval(interval);
figura = _this.generarFigura();
interval = setInterval(function(){_this.loop()},_this.time);
}
};
方法"loop"迭代直到片在canvas的底部,然后停止迭代清除间隔,创建一个新片并再次开始间隔。
this.generarFigura = function(){
var numeroFigura = Math.floor(Math.random() * 0);
var numeroPosFigura = Math.floor(Math.random() * 10);
var figurasPosibles = ['i','j','t','o','z','s','l'];
var figura;
switch(figurasPosibles[numeroFigura]){
case 'i': figura = new Figura('i'); break;
case 'j': break;
case 't': break;
case 'o': break;
case 'z': break;
case 's': break;
case 'l': break;
}
pantalla.figuras[pantalla.figuras.length] = figura;
//Si sale un numero que colocando la posicion se salga de la pantalla
//No me complico y la dejo en la (0,0)
if(((numeroPosFigura * 32.5) + figura.width) <= pantalla.width){
figura.x = 32.5 * numeroPosFigura;
}
figura.paint();
return figura;
};
方法"generarFigura"随机选择一块并添加到对象屏幕(pantalla)的块列表中。然后这件作品是在上下文中绘制的。
function Figura(tipo){
this.x = 0;
this.y = 0;
switch(tipo){
case 'i': this.width = 162.5; this.height = 32.5;
this.update = function(direccion){
context.clearRect(this.x,this.y,this.width,this.height);
if(direccion){
if(direccion=='derecha' && (this.x+this.width)<pantalla.width){
this.x += 32.5;
}else if(direccion=='izquierda' && this.x>0){
this.x -= 32.5;
}
}else{//Si no se mueve en ninguna dirección la figura baja
this.y += 32.5;
}
};
this.paint = function(){
context.beginPath();
context.canvas.width = context.canvas.width;
context.fillRect(this.x,this.y,this.width,this.height);
context.stroke();
}; break;
}
};
每个棋子的"update"方法删除棋子的旧位置并更新参数(如果"direccion"存在则将棋子向右或向左移动)。 "paint" 方法在指定的参数中绘制这块。
有人可以帮助我吗?谢谢。
您的 update() 函数仍在移动棋子,即使它们已到达底部。解决方法是仅在未到达底部时才移动棋子:
// in update()
if(this.y<pantalla.height-this.height){
this.y+=32.5;
// adjust if the piece is slightly below the bottom
if(this.y>pantally.height-this.height{
this.y=pantally.height-this.height;
}
}
顺便说一句,您的 Math.floor(Math.random() * 0)
将始终为零。
祝你玩俄罗斯方块游戏好运!