Ver Mensaje Individual
  #4 (permalink)  
Antiguo 23/10/2007, 23:10
Avatar de yoseman
yoseman
 
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 5 meses
Puntos: 5
Re: transiciones en actionscript

Yo sé una forma de apagar y/o encender un clip de película mediante código como con un efecto de alpha y accediendo a la propiedad alpha del clip, lo que pasa es que obviamente supone que el mapa tiene que estar en un clip distinto al que quieras que permanezca.

Se trataría básicamente de crear dos funciones en el clip principal que usasen respectivamente dos intervalos (no vale con el mismo porque puedes querer apagar y encender a la vez) cuyas condiciones de finalización fuesen que los alphas de los clips fusen respectivamente '<0' o '>100'

Código:
// variables intervalos
var intervalIdDecre:Number;
var mcDecre:String;
var intervalIdIncre:Number;
var mcIncre:String;

// variables de duracion del paso(milisegundos) e incremento decremento
var pasoInc:Number =5;
var pasoDec:Number =5;
var duration:Number = 50;

// Incrementar alpha de un clip hasta 100: initDecre("nombreClip");
// Incrementar alpha de varios clips hasta 100: initDecre("nombreClip1,nombreClip2,...");
// Decrementar alpha de un clip hasta 0: initIncre("nombreClip");
// Decrementar alpha de varios clips hasta 0: initIncre("nombreClip1,nombreClip2,...");

function decre():Void 
{	
	var my_str:String = mcDecre;
	var my_array:Array = my_str.split(",");
	for (var i = 0; i<my_array.length; i++) 
	{
		if(eval(my_array[i])._alpha>0)
		{
			eval(my_array[i])._alpha-=pasoDec;
		}
		else
		{
			if(eval(my_array[i])._alpha<0)
				eval(my_array[i])._alpha=0;
			
			clearInterval(intervalIdDecre);		
		}
	}
}

function initDecre(Clip):Void 
{
	if(intervalIdDecre != null) 
	{
		clearInterval(intervalIdDecre);
	}
	mcDecre=Clip;
	intervalIdDecre = setInterval(this,"decre", duration, mcDecre);
}

function incre():Void 
{	
	var my_str:String = mcIncre;
	var my_array:Array = my_str.split(",");
	for (var i = 0; i<my_array.length; i++) 
	{
		if(eval(my_array[i])._alpha<100)
		{
			eval(my_array[i])._alpha+=pasoInc;
		}
		else
		{
			if(eval(my_array[i])._alpha>100)
				eval(my_array[i])._alpha=100;
			clearInterval(intervalIdIncre);		
		}
	}
}

function initIncre(Clip):Void 
{
	if(intervalIdIncre != null) 
	{
		clearInterval(intervalIdIncre);
	}
	mcIncre=Clip;
	intervalIdIncre = setInterval(this,"incre", duration, mcIncre);
}
Ese código tiene que estar preferiblemente en el fotograma 1 de una capa.

La pega que tiene es que no se puede invocar mientras el intervalo está trabajando.

La forma de hacerlo como dice tortxo consistiría en algo así(aunque sin función de aceleración)

Poner este código en el clip susceptible de cambio de alpha, y desde el código cambiar el valor targetAlpha.


Código:
targetAlpha=100;
incAlpha=5;
decAlpha=5;
this.onEnterFrame=function()
{
	if(_alpha != targetAlpha)
	{
		trace("alfa:"+_alpha);
		if(_alpha<targetAlpha)
			_alpha+=incAlpha;
		if(_alpha>targetAlpha)
			_alpha-=decAlpha;
	}
}

Por ejemplo si creamos un cuadrado que convertimos en clip(que llamamos por ejemplo 'mc') y dentro del clip(dentro de mc) ponemos en el fotograma este código, y luego en el clip principal(no en mc, en el que contiene mc) ponemos un botón y le asignamos este codigo en el fotograma:
Código:
boton.onRelease=function()
{
mc.targetAlpha=0;
}
Conseguiremos bajar el alpha del clip a 0;

Salu2 ;) (a lo mejor hay alguna forma mejor, si será por formas de hacer las cosas)
__________________
[+]
[+]