Denk jij nog een leuk of nuttig flash script te hebben, post het dan in de scriptbase !
puzzel generator
Toegevoegd door: vinTage op 26-03-2007
bron
Beschrijving
Een puzzel generator die realtime van een foto een puzzel maakt.
preview
Code
actionscript code//edit onderstaande
//de foto
pVar = "VUL HIER DE LINKAGE IDENTIFIER IN";//zie uitleg onderaan de pagina
//aantal stukken breedte
b = VUL HIER EEN GETAL IN;
//aantal stukken hoogte
h = VUL HIER EEN GETAL IN;
//snap ratio voor de puzzelstukjes
snap = 15; //px
////////////////// het script (afblijven :p ) ///////////////////
//shuffle function
/* http://www.kirupa.com/forum/showpost.php?p=2058008&postcount=21 */
Array.prototype.shuffle = function(startIndex:Number, endIndex:Number) {
if (!startIndex) {
startIndex = 0;
}
if (!endIndex) {
endIndex = this.length-1;
}
for (var i:Number = endIndex; i>startIndex; i--) {
var randomNumber:Number = Math.floor(Math.random()*endIndex)+startIndex;
var tmp = this[i];
this[i] = this[randomNumber];
this[randomNumber] = tmp;
}
};
/////////////de rest ///////////////////
import flash.display.BitmapData;
import flash.geom.Rectangle;
//import flash.geom.Point;
import mx.transitions.Tween;
import mx.transitions.easing.*;
//orgineel plaatje
plaatje = BitmapData.loadBitmap(pVar);
fb = plaatje.width; //breedte van plaatje
fh = plaatje.height; //hoogte van plaatje
sb = Math.round(fb/b); //puzzelstuk breedte
sh = Math.round(fh/h); //puzzelstuk hoogte
rh = 0; // start _x van puzzelstukjes
rb = -1; // start _y van puzzelstukjes
rasterkleur = "0xff0000"; //rood
//startPuzzel knop positioneren in het midden
startPuz._x = plaatje.width-startPuz._width/2+20;
startPuz._y = plaatje.height+20;
fArray = Array(); //array om posities in op te slaan
for (i=0; i<h*b; i++) {
//rij._y ophogen
rb++;
if (rb>=b) {
rb =0;
rh += sh;
}
//copy maken van een gedeelte van de foto
this["copy"+i] = new BitmapData(sb, sh, true, 0x000000);
//buggie ??...zie blaat() op het einde...koste me uuuuren
this["copy"+i].copyPixels(plaatje, new Rectangle(rb*sb, rh, sb, sh), blaat());
//puzzelstuk maken
this.createEmptyMovieClip("puz"+i, i);
this["puz"+i].attachBitmap(this["copy"+i], i);
//positioneren
this["puz"+i]._x = rb*sb;
this["puz"+i]._y = rh;
//eind positie opslaan
this["puz"+i].xPos = rb*sb;
this["puz"+i].yPos = rh;
//items in array zetten om later te husselen
//breedte er gelijk bijtellen, want uit het array is het een string ipv int
fX = rb*sb+plaatje.width+40;
fN = fX+","+rh
fArray.push(fN)
//trace(fN)
//horizontale en verticale lijnen zetten
_root.createEmptyMovieClip("rasterHor"+i, this.getNextHighestDepth());
this["rasterHor"+i].lineStyle(1, rasterkleur, 100);
this["rasterHor"+i].moveTo(0,rh);
this["rasterHor"+i].lineTo(plaatje.width, rh);
_root.createEmptyMovieClip("rasterVer"+i, this.getNextHighestDepth());
this["rasterVer"+i].lineStyle(1, rasterkleur, 100);
this["rasterVer"+i].moveTo(rb*sb,0);
this["rasterVer"+i].lineTo(rb*sb,plaatje.height);
//mc maken waarmee de depth contineu word geswitched
_root.createEmptyMovieClip("hoogsteMc", this.getNextHighestDepth());
}
//omkadering maken
_root.createEmptyMovieClip("raster", this.getNextHighestDepth());
raster.lineStyle(1, rasterkleur, 100);
raster.moveTo(0, 0);
raster.lineTo(plaatje.width, 0);
raster.lineTo(plaatje.width, plaatje.height);
raster.lineTo(0, plaatje.height);
raster.lineTo(0, 0);
//husselen en actions meegeven aan het puzzelstuk
function husselPuzzel(){
fArray.shuffle();
for(g=0; g<h*b; g++){
fpos = fArray.shift();
z = fpos.split(",");
nieuwX = z[0];
nieuwY = z[1];
//trace("x: "+z[0]+" y: "+z[1])
//beweeg naar links
verplaatsX = new Tween(this["puz"+g], "_x", Elastic.easeOut, 0, nieuwX, 2, true);
verplaatsY = new Tween(this["puz"+g], "_y", Elastic.easeOut, 0, nieuwY, 2, true);
this["puz"+g].onPress = function() {
this.swapDepths(hoogsteMc);
this.startDrag(false);
}
this["puz"+g].onRelease = function() {
stopDrag();
this.swapDepths(hoogsteMc);
//snappen aan de orginele positie
if((this._x <= this.xPos+snap && this._x >= this.xPos-snap) &&
(this._y <= this.yPos+snap && this._y >= this.yPos-snap)){
this._x = this.xPos;
this._y = this.yPos;
}
};
}
}
startPuz.onRelease = function(){
husselPuzzel();
this._visible=false;
}
Gebruik
actionscript code/*
Importeer images naar je library, geef ze een linkage identifier mee.
Deze identifier moet je opgeven in de eerste regel van het script.
Vul ook het aantal puzzelstukken in voor de breedte en de hoogte.
Verder heb je een button nodig met de instancenaam startPuz
Zorg ervoor dat de afmetingen van je swf groot genoeg zijn om alles te kunnen tonen, de swf moet dus minimaal 2* de breedte zijn van de foto + 40px die ik heb gereserveerd voor de schijdingslijn in het midden.
Copieer bovenstaande script in een keyframe op de main timeline en puzzelen maar !
gemaakt naar aanleiding van
http://www.vintagesworld.be/forum/106/
*/
Je moet aangemeld zijn om commentaar te kunnen lezen of geven.