Denk jij nog een leuk of nuttig flash script te hebben, post het dan in de scriptbase !

vinTagesworld/flash scripts/games/puzzel generator


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/

*/
       
 



Download de bijbehorende fla file


Share |

Je moet aangemeld zijn om commentaar te kunnen lezen of geven.