• Super User

    Ciao Nicola,
    lo spezzettare l'immagine sarebbe la via più corretta ma di sicuro non a mano o con un photo editor.
    Serve un grossa conoscenza di actionscript per utilizzare le classi BitmapData e Matrix.

    Nel tuo esempio vengono usate delle maschere (forse la via più semplice).


  • User Attivo

    Ho tentato con le maschere, ma non riesco a far venire questo effeto. potresti indicarmi qualche risorsa dove poter colmare le mie lacune (per quanto riguarda la programmazione non ci sono grandi problemi ho molta esperienza...non moltissima con actionscript però 😞 )


  • Super User

    Copia e incolla questo script nel primo frame della timeline di Flash.
    Tieni un'immagine nella stessa directory e chiamala pic_1.jpg .

    
    // importo le classi
    import flash.display.BitmapData;
    import flash.geom.Point;
    import flash.geom.Matrix;
    
    // Gestione listener e broadcasting con la root
    
    var temp:MovieClip=_root.createEmptyMovieClip('temp_mc',_root.getNextHighestDepth());
    var empty:MovieClipLoader=new MovieClipLoader();
    var shuf:MovieClip=_root.shuffle_mc;
    empty.addListener(this);
    empty.loadClip('pic_1.jpg',temp);
    
    // Creo gli Arrays per le clip che comporranno il puzzle e dei punti
    var clips_array:Array=new Array();
    var points_array:Array=new Array();
    
    // metodo onLoadInit della classe MovieClipLoader
    
    this.onLoadInit=function():Void
    {
        var w:Number=5;
        var h:Number=5;
        var x:Number=0;
        var y:Number=0;
        var width:Number=Math.floor(temp._width/w);
        var height:Number=Math.floor(temp._height/h);
        var m:Matrix;
        var bitmap:BitmapData;
        var point:Point;
        var clip:MovieClip;
        var copy:MovieClip;
        // applico 2 cicli for per creazione di bitmapdata e matrici
        for(var i:Number=0;i<h;i++)
        {
            for(var j:Number=0;j<w;j++)
            {
                bitmap=new BitmapData(width,height,true,0xFFFFFFFF);
                m=temp.transform.matrix;
                m.translate(-width*j,-height*i);
                bitmap.draw(temp,m);
                //creo le clips e le inserisco in un array così come creo dei punti e li inserisco in un array.
                clip=_root.createEmptyMovieClip('clip_'+i+'_'+j+'_mc',_root.getNextHighestDepth());
                clips_array.push(clip);
                point=new Point(width*j,height*i);
                points_array.push(point);
                clip.attachBitmap(bitmap,1);
                clip._x=point.x;
                clip._y=point.y;
                clip.onPress=function():Void
                {
                    this.startDrag();
                }
                clip.onRelease=function():Void
                {
                    this.stopDrag();
                }
            }
        }
        temp.removeMovieClip();
    }
    
    

    Ho aggiunto startDrag() solo per farti vedere che puoi trascinare ogni singolo pezzo e l'immagine è tagliata.
    Studia lo script per tagliare l'immagine in strisce e poi, siccome ogni pezzo è dentro una movieclip li puoi muovere a tuo piacimento.


  • User Attivo

    ehm...suppongo che mi serva flash 8...vero?


  • Super User

    Si, per forza.
    🙂


  • User Attivo

    ok...mi organizzerò in proposito...


  • Super User

    :eheh:


  • User Attivo

    Ho provato lo script che mi hai postato sul PC di un mio collega il quale ha Flash 8, ma mi dice che non conosce la classe Matrix.

    Che posso fare?


  • Super User

    Scusami, non ho ben capito 🙂
    Chi non conosce la classe Matrix, il tuo collega?
    Oppure Flash non la trova ?


  • User Attivo

    Scusa sono stato poco chiaro...

    Ti trascrivo il messaggio di errore che mi da:

    Errore Scena=Scena 1, livello=Livello 1, fotogramma=1:Linea 28: Impossibile caricare la classe o l'interfaccia 'flash.geom.Matrix'.
    var m:Matrix;

    Errore Scena=Scena 1, livello=Livello 1, fotogramma=1:Linea 29: Impossibile caricare la classe o l'interfaccia 'flash.display.BitmapData'.
    var bitmap:BitmapData;

    Errore Scena=Scena 1, livello=Livello 1, fotogramma=1:Linea 30: Impossibile caricare la classe o l'interfaccia 'flash.geom.Point'.
    var point:Point;

    Errore Scena=Scena 1, livello=Livello 1, fotogramma=1:Linea 38: Impossibile caricare la classe o l'interfaccia 'flash.display.BitmapData'.
    bitmap=new BitmapData(width,height,true,0xFFFFFFFF);

    Errore Scena=Scena 1, livello=Livello 1, fotogramma=1:Linea 45: Impossibile caricare la classe o l'interfaccia 'flash.geom.Point'.
    point=new Point(widthj,heighti);

    Totale errori ActionScript: 5 Errori segnalati: 5


  • Super User

    Ok, non trova le classi.
    Guarda in questa path se c'è la classe BitamapData:
    C:\Program Files\Macromedia\Flash 8\en\First Run\Classes\FP8\flash\display