fleur: SVG-Game: Problem mit der Kollisionserkennung/ceckIntersection()

Beitrag lesen

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