ein js-neuling: "Fotografieren" mit clip und cur - Script für Point & Click Game

Moin!

Was haltet Ihr von diesem Script?
Mein Ziel war es, für ein point&click game eine Funktion zu schreiben,
die Fotografieren simuliert, s.d. der Spieler bspw. auf seine Kamera
klickt und dann mit einem Sucher (mittels cursor:xxx.cur) alles, was er
im Spiel sieht, "fotografieren" kann.

Bestimmt haben js-Profis da weitaus bessere/elegantere Ideen, wie soetwas
zu bewerkstelligen wäre - leider habe ich auch nach stundenlangem Googlen
nichts zu diesem Thema finden können.

  
/*******************************************  
FOTOGRAFIEREN (mit Mouse-Cursor als Sucher):  
*********************************************getestet für FF und IE8*********/  
  
/*Aufrufen: function sucher() mit Parametern: je 4 für Clip und FotoArea und je 1 für Rewind und NewZ  
  ---> z.B. mit onclick auf ein Kamera-Bild  
*/  
/*- fülle die Arrays Original, posAlb['top'], posAlb['left'] mit JavaScript: Original.push(...), ...  
  - für die Standard-IE-cur-Größe nimmt man für Clip die Werte 30,25,5,0!  
  - benötige ein cur- und ein png-image mit Namen "suchcur" (vorzugsweise ein bild eines kamera-suchers ;-)  
!!!	BEACHTE: clip funzt nur bei absolut positionierten Objekten	!!!  
*/  
  
var suchen 	= 0; // Kamera aus/an  
var Rewind;          // nach wievielen Fotos Film voll (wird mit Parameter für sucher() def.)  
var NewZ;            // Klon bekommt z-index NewZ+i+1  (wird mit Parameter für sucher() def.)  
  
var Original = new Array(); 	// die IDs der zu klonenden Objekte  
var Klon = new Array();		// Klone (, die fotografiert werden)  
var KlonBox = new Array();	// Klon-Container  
  
var Clip = new Array();		// definiert, welcher Bereich des Klons fotografiert wird  
var FotoArea = new Array();	// definiert, welcher Bereich des Klons fotografierbar ist (oben,unten,links.rechts)  
  
	posx = null;	// Mauspositionen rel. zum linken Fensterrand  
	posy = null;	// Mauspositionen rel. zum oberen Fensterrand  
  
  
var posAlb = new Array('top','left');	// Positionen, an denen Fotos abgelegt werden  
	posAlb['top'] = new Array();  
	posAlb['left'] = new Array();  
  
// Cursor als Sucher und Knippser verwenden und Startbedingungen festlegen:  
function sucher(C1,C2,C3,C4,  FA1,FA2,FA3,FA4,  R,  N) {  
	if (suchen == 0) {  
		suchen = 1;  
// ein Kamera-Sucher-Bild wäre schön ;-} für .cur wird bei IE leider Bild auf 32x32 festgelegt  
// url(deinbild.png) für FF, url(deinbild.cur) für IE -> Reihenfolge wichtig: Wenn zuerst  
// url(deinbild.cur), dann jibbetz probleme mit mit FF, glaube ich  
		document.getElementsByTagName('body')[0].style.cursor = "url(suchcur.png),url(suchcur.cur),pointer";  
		Clip.push(C1,C2,C3,C4);  
		FotoArea.push(FA1,FA2,FA3,FA4);  
		Rewind = R;  
		NewZ = N;  
		document.onmousedown = foto_start;  
	}  
	else {  
		suchen = 0;  
		document.getElementsByTagName('body')[0].style.cursor = "default";  
/*		document.embeds[0].stop(); // irgendein nettes Kamera-Geräusch*/  
	}  
}  
  
var Foto = 0;					// Anzahl der schon gemachten Fotos  
  
// Fotos schießen (neue Arrays für Fotos+Container; Mausposition bestimmen; die zu fotografierenden Bilder klonen;  
// jedem Klon seine div; Größe des Fotos festlegen; den Klon fotografieren - d.h. clippen;  
// def., was mit Foto passiert; nach durch Rewind def. Anzahl an Fotos Film voll):  
function foto_start(e) {  
	Klon[Foto] = new Array();	// für jedes Foto ein neuer Klon-Sub-Array  
	KlonBox[Foto] = new Array();  
	posx = document.all ? window.event.clientX : e.pageX;  
	posy = document.all ? window.event.clientY : e.pageY;  
	var FotosProSeite = posAlb['top'].length;	// wieviele Fotos auf eine Doppelseite des Albums kommen  
	if (suchen==1 && posy > FotoArea[0] && posy < FotoArea[1] && posx > FotoArea[2] && posx < FotoArea[3] && Foto < Rewind) {  
/*		document.embeds[0].play();*/  
		for (i = 0; i < Original.length; i++) {  
			Klon[Foto][i] = document.getElementById(Original[i]).cloneNode(true);  
			KlonBox[Foto][i] = document.createElement('div');  
			document.getElementsByTagName('body')[0].appendChild(KlonBox[Foto][i]);  
			KlonBox[Foto][i].appendChild(Klon[Foto][i]);  
			posa = posx - Klon[Foto][i].offsetLeft + Clip[0]; posb = posy - Klon[Foto][i].offsetTop + Clip[1];  
			posc = posy - Klon[Foto][i].offsetTop + Clip[2]; posd = posx - Klon[Foto][i].offsetLeft + Clip[3];  
			Klon[Foto][i].style.clip = "rect(" + posc + "px" + "," + posa + "px" + "," + posb + "px" + "," + posd + "px" + ")";  
			with (KlonBox[Foto][i].style) {  
				position = "absolute";  
				zIndex = NewZ + i + 1;  
				top = (posAlb['top'][Foto%FotosProSeite] - posy) + "px";  
				left = (posAlb['left'][Foto%FotosProSeite] - posx) + "px";  
//				visibility = "hidden";  
			}  
		}  
		Foto++;  
	}  
	else if (suchen == 1 && Foto == Rewind) {  
/*			document.embeds[1].play();	// ein Rewind-Sound wäre schön*/  
	}  
}  
  
/* HINWEIS: Man könnte ein Fotoalbum erstellen, in die die Fotos wandern -> deshalb auch "Fotos%FotosProSeite";  
dann sollte "visibilty = "hidden" aktiv sein (s.o.) und mit Öffnen des Albums wieder auf "visible".*/  

Würde mich über konstruktive Kritik freuen,
Gruß