Ich spiele mit einem Bomberman-Klon herum, um die Entwicklung von Spielen zu lernen.
Bisher habe ich Kacheln, Bewegung, Kollisionserkennung und Gegenstandsaufnahme durchgeführt. Ich habe auch Pseudo-Bombplacing (nur Grafik und Kollision, keine echte Funktionalität).
Ich habe eine jsFiddle des Spiels mit der Funktionalität gemacht, die ich derzeit habe. Der Code in der Geige ist allerdings sehr hässlich. Scrollen Sie an der Karte vorbei und Sie finden, wie ich Bomben platziere.
Was ich jedenfalls tun möchte, ist ein Objekt, das allgemeine Informationen über Bomben enthält wie:
function Bomb(){
this.radius = player.bombRadius;
this.placeBomb = function (){
if(player.bombs != 0){
// place bomb
}
}
this.explosion = function (){
// Explosion
}
}
Ich weiß allerdings nicht wirklich, wie ich es in den Code einfügen soll. Jedes Mal, wenn ich eine Bombe platziere, muss var bomb = new Bomb();
oder muss ich diese ständig im Skript haben, um darauf zugreifen zu können.
Wie fügt die Bombe Schaden zu? Ist es so einfach wie X, Y in alle Richtungen zu machen, bis der Radius abläuft oder das Objekt ihn stoppt? Kann ich so etwas wie setTimeout (bomb.explosion, 3000) als Timer verwenden?
Jede Hilfe wird geschätzt, sei es eine einfache Erklärung der Theorie oder Codebeispiele basierend auf der Geige. Als ich das Objekt so ausprobierte, brach es den Code.
Update: Ich platziere jetzt Bomben und lösche sie nach einer gewissen Zeit, abhängig von der Position, an der ich sie platziert habe. Aber wenn ich eine Bombe platziere, bevor die erste Bombe explodiert, wird nur eine davon gelöscht (offensichtlich, da sich bombX und bombY geändert haben, seit die erste platziert wurde).
Jetzt muss ich wissen, wie ich dieses Problem beheben kann, vielleicht ein neues Array mit allen Bombenpositionen erstellen? Was ist der beste Weg, dies zu tun?
Aktueller Code:
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++;
}