Deshalb hatte ich dich gebeten den kompletten Code zu posten weil es mich interessiert hätte auf welche Art und weiße du dein Spiel zeichnest. Die gängige Methode ist ja das man einen endlosen Loop hat welcher die aktuelle Szene bei jedem Tick neu zeichnet.
Wenn deine Bonusbox in zufälligen Intervallen auftauchen soll. würde ich das ungefähr so lösen:
Code:
function Game() {
for (;;) this.draw();
}
Game.prototype.lastBonusBox = null;
Game.prototype.nextBonusBox = null;
Game.prototype.hasActiveBonusBox = false;
Game.prototype.bonusbox = null;
Game.prototype.activateBonusBox = function () {
this.lastBonusBox = +new Date;
this.hasActiveBonusBox = true;
this.bonusbox = new Bonusbox;
};
Game.prototype.disableBonusBox = function () {
this.hasActiveBonusBox = false;
this.lastBonusBox = +new Date;
this.nextBonusBox = +new Date + Math.floor((Math.random() * 10) + 1);
};
Game.prototype.draw = function () {
if (+new Date > this.nextBonusBox)
this.activateBonusBox();
if (this.hasActiveBonusBox === true)
gamectx.draw(this.bonusbox.draw() ...);
if (kollision)
this.disableBonusBox()
};
Der Gedanke dabei ist ganz einfach, das du über die Funktionen "activateBonusBox" und "disableBonusBox" innerhalb deines Scripts entscheiden kannst wann du eine Bonusbox aktivieren, und wann deaktivieren möchtest. Sobald die Bonusbox über "disableBonusBox" deaktiviert wird, wird sie im draw-loop nichtmehr berücksichtigt und von daher beim Zeichenprozess schlicht ignoriert. Außerdem wird ein neuer Zeitstempel generiert wann die nächste Box auftauchen soll (momentaner Zeitstempel + 1-10 sekunden).
Da dein Kollisionsmodell ja funktioniert, kannst du ja bereits feststellen wenn und wann der Ball mit einer deiner Bonusboxen kollidiert, sobald das passiert rufst du wieder die Funktion "disableBonusBox" auf.
Logischerweise ist das Beispielcode, soll nur zur Veranschaulichung dienen.