"Fotografieren" mit clip und cur - Script für Point & Click Game
ein js-neuling
- javascript
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ß