Hallo Leute,
ich hatte gerade einen echt langen Thread geschrieben und ausversehen den Browser geschlossen. Also nochmal.
Baue ein Kampfsystem, ein 1on1. Lebenspunkte heißen BTC und Kampfstärke ist in BTC/s. Wird alles über ein setInterval realisiert, welches abbrechen soll, wenn einer der Spieler keine BTC mehr hat.
Klappt beim ersten Spiel gut, wechsle ich aber das Level, und starte dieses, läuft es zwar auch erst scheinbar korrekt - doch dann ist ein Spieler bei Null und das Interval läuft trotzdem weiter, obwohl ein clearInterval angesteuert wird. Schließlich ist es derselbe Code.
Hier habe ich es online: http://wernersbacher.de/pro/coinerdev/
Vorgehen:
- Klick auf "Online Shop", dann Start.
- Wenn die Runde zuende ist, auf Phone House klicken, und Starten.
-> Wenn einer der beiden kaputt ist läuft es trotzdessen weiter.
Hier noch der harte lange Code:
[src=javascript]
// Draws Startscreen
function showStartRaid(name) {
var level = dungeons[name];
playerBTC = btc;
playerBTCs = btcs;
playerName = nick;
// Sets stats for called level
enemyBTC = dun[name]["buyer"]["btc"];
enemyBTCs = dun[name]["buyer"]["btcs"];
enemyName = dun[name]["buyer"]["label"];
enemyNum = level * dun[name]["meta"]["base"];
bossBTC = dun[name]["boss"]["btc"];
bossBTCs = dun[name]["boss"]["btcs"];
bossName = dun[name]["boss"]["label"];
/* Reset everything */
/* Fehlt jetzt hier */
}
var battle = false;
$(".raid_building").click(function() {
//Clears interval
clearInterval(frameStop);
//Draws level
showStartRaid(name);
$("#mainRaid").fadeIn(200);
//Sets start BTC as fighting stats (they will decrease during battle)
fplayerBTC = playerBTC;
fenemyBTC = enemyBTC;
//Click on "Start"
$("#startRaid").click(function() {
function raiden() {
//Calculates fighting
fenemyBTC -= playerBTCs/frameMinus;
fplayerBTC -= enemyBTCs/frameMinus;
//Draws stats and health
/* Fehlt jetzt hier */
console.log("frame");
//console.log(battle+" "+name);
if(fplayerBTC >= 0 && fenemyBTC >= 0)
console.log("battle goes on")
else {
//If battle is over, stop it
clearInterval(frameStop);
}
}
//Start battle
frameStop = setInterval(raiden, frameRaid);
});
});
[/src]
frameStop und Co. sind natürlich global, damit von überall darauf zugegriffen werden kann.
Danke für jede Hilfe, ich suche parrallel natürlich trotzdessen weiter und versuche eine Lösung zu finden.
--- [2014-08-21 01:01 CEST] Automatisch zusammengeführter Beitrag ---
Okay, habs gelöst. besser gesagt, jemand von Stackoverflow.
Habe den onclick handler für .raid_building aus seinem eltern click handler genommen. Jetzt funktioniert es, da nicht mehrere Male .raid_building aufgerufen wird
ich hatte gerade einen echt langen Thread geschrieben und ausversehen den Browser geschlossen. Also nochmal.
Baue ein Kampfsystem, ein 1on1. Lebenspunkte heißen BTC und Kampfstärke ist in BTC/s. Wird alles über ein setInterval realisiert, welches abbrechen soll, wenn einer der Spieler keine BTC mehr hat.
Klappt beim ersten Spiel gut, wechsle ich aber das Level, und starte dieses, läuft es zwar auch erst scheinbar korrekt - doch dann ist ein Spieler bei Null und das Interval läuft trotzdem weiter, obwohl ein clearInterval angesteuert wird. Schließlich ist es derselbe Code.
Hier habe ich es online: http://wernersbacher.de/pro/coinerdev/
Vorgehen:
- Klick auf "Online Shop", dann Start.
- Wenn die Runde zuende ist, auf Phone House klicken, und Starten.
-> Wenn einer der beiden kaputt ist läuft es trotzdessen weiter.
Hier noch der harte lange Code:
[src=javascript]
// Draws Startscreen
function showStartRaid(name) {
var level = dungeons[name];
playerBTC = btc;
playerBTCs = btcs;
playerName = nick;
// Sets stats for called level
enemyBTC = dun[name]["buyer"]["btc"];
enemyBTCs = dun[name]["buyer"]["btcs"];
enemyName = dun[name]["buyer"]["label"];
enemyNum = level * dun[name]["meta"]["base"];
bossBTC = dun[name]["boss"]["btc"];
bossBTCs = dun[name]["boss"]["btcs"];
bossName = dun[name]["boss"]["label"];
/* Reset everything */
/* Fehlt jetzt hier */
}
var battle = false;
$(".raid_building").click(function() {
//Clears interval
clearInterval(frameStop);
//Draws level
showStartRaid(name);
$("#mainRaid").fadeIn(200);
//Sets start BTC as fighting stats (they will decrease during battle)
fplayerBTC = playerBTC;
fenemyBTC = enemyBTC;
//Click on "Start"
$("#startRaid").click(function() {
function raiden() {
//Calculates fighting
fenemyBTC -= playerBTCs/frameMinus;
fplayerBTC -= enemyBTCs/frameMinus;
//Draws stats and health
/* Fehlt jetzt hier */
console.log("frame");
//console.log(battle+" "+name);
if(fplayerBTC >= 0 && fenemyBTC >= 0)
console.log("battle goes on")
else {
//If battle is over, stop it
clearInterval(frameStop);
}
}
//Start battle
frameStop = setInterval(raiden, frameRaid);
});
});
[/src]
frameStop und Co. sind natürlich global, damit von überall darauf zugegriffen werden kann.
Danke für jede Hilfe, ich suche parrallel natürlich trotzdessen weiter und versuche eine Lösung zu finden.
--- [2014-08-21 01:01 CEST] Automatisch zusammengeführter Beitrag ---
Okay, habs gelöst. besser gesagt, jemand von Stackoverflow.
Habe den onclick handler für .raid_building aus seinem eltern click handler genommen. Jetzt funktioniert es, da nicht mehrere Male .raid_building aufgerufen wird