Estoy jugando con un clon de bomberman para aprender a desarrollar juegos.
Hasta ahora he hecho mosaicos, movimiento, detección de colisión y recogida de artículos. También tengo pseudo bombardeo (solo gráficos y colisión, sin funcionalidad real).
Hice un jsFiddle del juego con la funcionalidad que tengo actualmente. Sin embargo, el código en el violín es muy feo. Desplácese por el mapa y encontrará cómo coloco bombas.
De todos modos, lo que me gustaría hacer es un objeto que tenga información general sobre bombas como:
function Bomb(){
this.radius = player.bombRadius;
this.placeBomb = function (){
if(player.bombs != 0){
// place bomb
}
}
this.explosion = function (){
// Explosion
}
}
Sin embargo, no sé cómo encajarlo en el código. Cada vez que coloco una bomba, ¿debo hacerla var bomb = new Bomb();
o necesito tenerla constantemente en el script para poder acceder a ella?
¿Cómo hace daño la bomba? ¿Es tan simple como hacer X, Y en todas las direcciones hasta que el radio se agote o el objeto lo detenga? ¿Puedo usar algo como setTimeout (bomb.explosion, 3000) como temporizador?
Se agradece cualquier ayuda, ya sea una explicación simple de la teoría o ejemplos de código basados en el violín. Cuando probé el objeto, rompe el código.
Actualización: ahora coloco bombas, y después de un cierto tiempo lo elimino dependiendo de la posición en la que lo coloqué. Pero si coloco una bomba antes de que explote la primera bomba, solo se elimina una de ellas (obviamente, dado que bombX y bombY han cambiado desde que se colocó la primera).
Ahora necesito saber cómo solucionar este problema, ¿tal vez crear una nueva matriz con todas las posiciones de bomba? ¿Cuál es la mejor manera de hacer esto?
Código actual:
function placeBomb(){
if(placebomb && player.bombs != 0){
map[player.Y][player.X].object = 2;
bombX = player.X; bombY = player.Y;
placebomb = false;
player.bombs--;
setTimeout(explode, 3000);
}
}
function explode(){
alert('BOOM!');
delete map[bombY][bombX].object;
player.bombs++;
}