Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [PILLOLINA] Motore di render prospettico centrale

    Non sara' una vera e propria pillola, semplicemente diverse righe di Action Script commentate il piu' possibile per cercare di spiegarvi i concetti alla base di movimenti prospettici e le loro possibili implementazioni rispetto a mouse o altro.

    Aprite FlashMX su un documento di 550 x 400 pixels [default] e settate un framerate a 30.

    Ora disegnate un rettangolo di 300 x 100 pixel

    Assicuratevi che abbia un riempimento solido e con alfa ad almeno 30% [consiglio di usare un colore chiaro, giallo ad esempio] e il bordo come volete...

    Ora salvatelo come movieClip con punto di registrazione centrale ... dategli un nome di istanza mc , create un layer sopra questo nella root e scrivete il codice sottoriportato.

    Buoni esperimenti a tutti

    Codice PHP:
    stop();
    // Concetti base sulla scala in prospettiva
    // Scale=fl/(fl+z)
    // [[url]http://www.bit-101.com/tutorials/perspective.html[/url]]
    // ... maledetto baco ...
    // maggiore sara' z, piu' distante sara' l' oggetto

    // Scala
    // f = dimensione iniziale
    // z = livello di zoom
    // x,y = posizionamento
    MovieClip.prototype.scale = function(f,z,x,y) {
        var 
    / (z);
        var 
    xcenter Stage.width/2;
        var 
    ycenter Stage.height/2;
        
    this._x xcenter + (s);
        
    this._y ycenter + (s);
        
    this._xscale this._yscale 100;
    }

    var 
    mc_size mc._width// larghezza del movie genitore per riferimenti sulla distanza
    var zoom 70// da quanto parte la zoomata
    var zoomarray = new Array(); // necessario per la memoria delle distanze
    var total_mcs 20// quanti ne duplica [Diminure zoom_step al crescere dei duplicati]
    // alcuni esempi di accoppiate decenti:
    // total_mcs = 10; zoom_step = 0.6;
    // total_mcs = 20; zoom_step = 0.15;
    // total_mcs = 30; zoom_step = 0.05;
    var distance 200// incrementa la distanza
    for(var 0total_mcsi++) {
        var 
    nowi total_mcs-i// rovescio la profondita' per far si che il depth corrisponda
        
    mc.duplicateMovieClip("mc"+i,nowi,this); // duplico
        
    zoomarray[i] = zoom + (distance i); // assegno la zoomata in base alla profondita'
        
    _root["mc"+i].zoomarray[i]; // assegno il riferimento z per ogni mc
        
    _root["mc"+i].onEnterFrame = function() {
            var 
    _root._xmouse Stage.width/2// x centrale
            
    var _root._ymouse Stage.height/2// y centrale
            
            
    this.scale(mc_size,this.z,-x,-y);
            
    // applico la scala e gli faccio seguire il mouse al contrario rispetto lo stage
            // this.scale(mc_size,this.z,x,y); cosi' avrebbe seguito il mouse
        
    }
    }
    mc._visible false// del primo non ci faccio piu' niente ...

    var zoom_step 0.15// velocita' di zoomata;
    var zoom_backvelocity 2// velocita' differente quando torna indietro [1 per lasciarla uguale]
    _root.onMouseDown = function() {
        
    this.onEnterFrame = function() {
            for(var 
    0total_mcsi++) {
                if(
    i==(total_mcs-1) && _root["mc"+i].< -300 && zoom_step>0) { // se l'ultimo e' a zoom -300 torno indietro
                    
    zoom_step = -1*(zoom_step) * zoom_backvelocity;
                }
                else if(
    i==&& _root["mc0"].100 && zoom_step<0) { // se il primo e' a scala 100, torno avanti
                    
    zoom_step = -1*(zoom_step) / zoom_backvelocity;
                }
                
    zoom -= zoom_step i// rimpicciolisco sempre piu' la zoomata [e' inversa quindi aumenta la scala]
                
    zoomarray[i] = zoom + (distance i); // riassegno la memoria della zoomata
                
    _root["mc"+i].zoomarray[i]; // riassegno il riferimento al movieClip
                
    if(_root["mc"+i].< -300) { // verifico che non sia troppo grande
                    
    _root["mc"+i]._visible false// e in caso lo faccio sparire [effetto trapasso]
                
    }
                else {
                    
    _root["mc"+i]._visible true;
                }
            }
        }
    }
    _root.onMouseUp = function() {
        
    delete this.onEnterFrame;

    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  2. #2
    Utente di HTML.it L'avatar di Aran
    Registrato dal
    Nov 2002
    Messaggi
    1,529
    Bella come pillola!!
    bravo andr3a, me la sono già provata e salvata nel mio archivio!

    Complimentz:metallica
    Mi diceva sempre: "Mai mangiare a stomaco vuoto..."

    Frank Cianuro - Aeroplane - Aran Blog - No Spez la Catena.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.