Hallo Felix,
Danke für deine Rückmeldung zu meinem Programm. Ich hab versucht mein Programm mal "kompakter" zuschreiben:
var game = {
init: function(load_evt){
game.svgdoc = load_evt.target.ownerDocument;
game.svgroot=this.svgdoc.rootElement;
game.fish = this.svgdoc.getElementById("fish");
game.fishCX = this.fish.getAttribute("cx");
game.fishCY = this.fish.getAttribute("cy");
game.countdown = this.svgdoc.getElementById("laufzeit");
game.countdownRESET = 180;
game.countdownTIME = this.countdownRESET;
if(!window.XML)setInterval("game.showTime()",1000);
if(!window.XML)setInterval("game.collDetection()",200);
game.svgroot.addEventListener("keydown",game.keyCheck,false);
},
reset: function(){
game.fish.setAttribute("cy",game.fishCY);
game.fish.setAttribute("cx",game.fishCX);
game.countdownTIME = game.countdownRESET;
},
showTime: function() {
var std,min,sek;
sek=game.countdownTIME;
//ist das "Math.floor(..)" notwendig?
min=Math.floor(sek/60);//berechnet die Minuten
sek-=min*60; //zieht die vollen Minuten von den Sekunden ab
sek=Math.floor(sek);
//Sicherstellen, dass sowohl die Minuten als auch die Sekunden aus zwei Ziffern bestehen
min=(min<10)?"0"+min:min;
sek=(sek<10)?"0"+sek:sek;
game.countdown.firstChild.data=min+":"+sek;
if(game.countdownTIME==0){
alert("GAMEOVER");
game.reset();
}
game.countdownTIME-=1;
},
keyCheck: function(keydown_evt) {
var keynum,c;
keynum=keydown_evt.keyCode; //Tastencode verarbeiten
if((keynum==38)||(keynum==40)){
c=parseInt(game.fish.getAttribute("cy"));
if(keynum==38)c-=10; //Pfeiltaste oben
if(keynum==40)c+=10; //Pfeiltaste unten
game.fish.setAttribute("cy",c);
}
if((keynum==37)||(keynum==39)){
c=parseInt(game.fish.getAttribute("cx"));
if(keynum==37)c-=10; //Pfeiltaste links
if(keynum==39)c+=10; //Pfeiltaste rechts
game.fish.setAttribute("cx",c);
}
/*
if(keynum==80){ //P
//setTime(5);
//pauseAnimation();
alert("Pause");
}
if(keynum==32){ //Leertaste
alert("Leertaste: ");
}*/
if(keynum==27)game.reset();
keydown_evt.stopPropagation(); //Tastaturereignis nicht weiter geben
},
collDetection: function(){
// SVG-Wurzelelement-Objekt
var d=document.documentElement;//kann ich stattdessen auch game.svgdoc (siehe init) benutzen?
// Rechteck:
var r=document.getElementById("rect");
// Rechteck-Objekt = zu testender Intersection-Bereich
var rect=d.createSVGRect();
rect.x=r.getAttribute("x");
rect.y=r.getAttribute("y");
rect.width=r.getAttribute("width");
rect.height=r.getAttribute("height");
//var check=d.checkIntersection(game.fish,rect);
// Hinweis: analoges Vorgehen mit r.checkEnclosure():
//var check=d.checkEnclosure(k,rect);
if(d.checkIntersection(game.fish,rect)){
alert("GAMEOVER");
game.reset();
}
}
}
Die svg-Datei bleibt die gleiche nur das onload muss geändert werden (onload="game.init(evt)).
Entspricht es jetzt eher deinen Vorstellungen?
Viele Grüße,
fleur