Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Refresh oggetto

  1. #1
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220

    Refresh oggetto

    Salve a tutti!

    Sto usando questa classe scritta tempo fa da Andr3a per la rotazione elissoide di movies con effetto prospettiva:

    codice:
    function ClipRotation(path) {
    	
    	function __firstClipPosition() {
    		for(var a = 0, b = __clips.length; a < b; a++)
    			__clips[a].scost = ((360 / b) / 2) + ((360 / b) * a);
    		__manager(1);
    	}
    	
    	function __manager(acceleration) 
    	{
    		for(var a = 0, b = __clips.length, sin = 0; a < b; a++) 
    		{
    			__clips[a].scost = __clips[a].scost + acceleration;
    			sin =  __m.sin(__clips[a].scost * __m.PI / 180);
    			__clips[a].swapDepths(__m.sin(__clips[a].scost * __m.PI / 180) * 20);
    			__clips[a]._x = (__m.cos(__clips[a].scost * __m.PI / 180) * __wx) + __cx;	
    			__clips[a]._y = (sin * __wy) + __cy;
    			__clips[a]._xscale = __clips[a]._yscale = 100 - __minscale + __minscale * sin;
    		}
    	}
    	
    	function __loopManager() 
    	{
    		//if(_xmouse > -192 && _xmouse < 245)
    		//{
    			var acceleration = (__maxspeed * (path._xmouse - __cx)) / __wx;
    			if(acceleration > __maxspeed) acceleration = __maxspeed;
    			else if(acceleration < -__maxspeed) acceleration = -__maxspeed;
    			__manager(acceleration);
    		//}
    	}
    	
    	this.setClips = function(clips) 
    	{
    		__clips = clips;
    		__firstClipPosition();
    	}
    	
    	this.setProperties = function(maxspeed, minscale, cx, cy, wx, wy) 
    	{
    		__maxspeed = maxspeed, 
    		__minscale = minscale,
    		__cx = cx, __cy = cy, 
    		__wx = wx,	__wy = wy;
    	}
    	
    	this.start = function() 
    	{
    		if(__i > 0)
    			clearInterval(__i);
    		__i = setInterval(__loopManager, 15);
    	}
    	
    	this.stop = function() 
    	{
    		clearInterval(__i);
    		__i = 0;
    	}
    	
    	var	__maxspeed = 5, 
    		__minscale = 40,
    		__cx = 150, __cy = 50, 
    		__wx = 100,	__wy = 30, 
    		__i = 0, 
    		__clips = [],
    		__m = Math;
    }
    
    var CR = new ClipRotation(this);
    serie = new Array();
    
    for(i=0;i<_global.n_porte;i++)
    {
    	nmc.duplicateMovieClip("nmc"+i, i);
    	this['nmc'+i].descrizione = _global['descrizione'+i];
    	this['nmc'+i].img.loadMovie(_global['img'+i]);
    	this['nmc'+i].nome.text  = _global['nome'+i];
    	serie[i] = this["nmc"+i];
    }
    
    CR.setClips(serie);
    CR.setProperties(1, 30, 0, -50, 25*_global.n_porte, 80);
    CR.start();
    nmc._visible = false;
    stop();
    Come potete vedere prendo la classe e le do in ingresso un array di clips che creo dinamicamente in base a dei dati che tiro fuori da un database.

    Il mio problema è che cambiando categoria di prodotti, cambia l'oggetto e quindi vorrei resettare e ricreare l'oggetto coi nuovi movies.

    Al momento mando indietro di in frame, recupero i dati dal db e poi torno al codice ch evi ho postato sopra.

    Il problema è che se i prodotti della prima categoria sono 9 (e va tutto abene) quando passo ad una categoria con 13 gli ultimi 4 (13 - 9) non seguono gli altri ma girano a casaccio.

    Credo che il problema sia che l'oggetto non viene distrutto e ricreato ma solo aggiornato. Sapreste dirmi un modo per RESETTARE totalment el'oggetto (boh...magari un distruttore fatto bene).

    Grazie


  2. #2
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Risolto....

    Ho smembrato la classe e resa una semplice funzione onEnterFrame. Non è molto professionale ma purtroppo nemmeno sistemando a dovere la classe riuscivo a farla aggiornare.

    codice:
    _global.__maxspeed = 1; 
    _global.__minscale = 30;
    _global.__cx = 0;
    _global.__cy = -50; 
    _global.__wx = 25*_global.n_porte;
    _global.__wy = 80; 
    _global.__i = 0; 
    _global.__clips = [];
    _global.__m = Math;
    
    function __firstClipPosition() 
    {
    	for(var a = 0, b = _global.n_porte; a < b; a++)
    	{
    		this['nmc'+a].scost = ((360 / b) / 2) + ((360 / b) * a);
    	}
    	__manager(1);
    }
    	
    function __manager(acceleration) 
    {
    	for(var a = 0, b = _global.n_porte, sin = 0; a < b; a++) 
    	{
    		this['nmc'+a].scost = this['nmc'+a].scost + acceleration;
    		sin =  _global.__m.sin(this['nmc'+a].scost * __m.PI / 180);
    		this['nmc'+a].swapDepths(_global.__m.sin(this['nmc'+a].scost * _global.__m.PI / 180) * 20);
    		this['nmc'+a]._x = (_global.__m.cos(this['nmc'+a].scost * _global.__m.PI / 180) * _global.__wx) + _global.__cx;	
    		this['nmc'+a]._y = (sin * _global.__wy) + _global.__cy;
    		this['nmc'+a]._xscale = this['nmc'+a]._yscale = 100 - _global.__minscale + _global.__minscale * sin;
    	}
    }
    	
    onEnterFrame = function() 
    {
    	acceleration = (_global.__maxspeed * (this._xmouse - _global.__cx)) / _global.__wx;
    	if(acceleration > _global.__maxspeed) 
    	{
    		acceleration = _global.__maxspeed;
    	}
    	else if(acceleration < -_global.__maxspeed) 
    	{
    		acceleration = -_global.__maxspeed;
    	}
    	__manager(acceleration);
    }
    
    function rcStart() 
    {
    	__firstClipPosition();
    }
    
    for(i=0;i<_global.n_porte;i++)
    {
    	nmc.duplicateMovieClip("nmc"+i, i);
    	this['nmc'+i].descrizione = _global['descrizione'+i];
    	this['nmc'+i].img.loadMovie(_global['img'+i]);
    	this['nmc'+i].nome.text  = _global['nome'+i];
    }
    
    rcStart();
    nmc._visible = false;
    stop();

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.