Foros del Web » Creando para Internet » Flash y Actionscript »

Incompatibilidad de FlashVars en AS2 con AS3

Estas en el tema de Incompatibilidad de FlashVars en AS2 con AS3 en el foro de Flash y Actionscript en Foros del Web. Cordial Saludo Un diseñador ha desarrollado una animación en ActionScript 3, me han solicitado que desarrolle determinado sistema el cual se debe integrar con dicha ...
  #1 (permalink)  
Antiguo 09/10/2010, 03:30
 
Fecha de Ingreso: marzo-2009
Ubicación: Cali (Valle) - Colombia
Mensajes: 164
Antigüedad: 15 años, 1 mes
Puntos: 2
Incompatibilidad de FlashVars en AS2 con AS3

Cordial Saludo

Un diseñador ha desarrollado una animación en ActionScript 3, me han solicitado que desarrolle determinado sistema el cual se debe integrar con dicha animación, mi desarrollo funciona bien y sin problema alguno cuando lo tengo independiente de la animación, así mismo la animación funciona bien siempre y cuando esté independiente del desarrollo, ante lo cual se ha realizado pruebas y se ha notado que el inconveniente está al paracer relacionado de manera especial al uso de FlashVars, ya que no se está dando el paso de las variables que necesitamos y como mi desarrollo a diferencia de la animación no está en ActionScript 3, sino ActionScript 2, ver código del FlashVars por donde paso las variables y llamo el swf desde un script PHP:

<object width="1000" height="600">
<param name="movie" name="index.swf" />
<param name="FlashVars" value="valor11=<?php echo $valor11; ?>&valor12=<?php echo $valor12; ?>&valor13=<?php echo $valor13; ?>&valor14=<?php echo $valor14; ?>" />
<embed src="index.swf" width="1000" height="600" FlashVars="valor11=<?php echo $valor11; ?>&valor12=<?php echo $valor12; ?>&valor13=<?php echo $valor13; ?>&valor14=<?php echo $valor14; ?>" />
</object>

Una alternativa sería pasar toda la animación a ActionScript 2 ó pasar toda mi aplicación a ActionScript 3, más ambas cosas las veo muy complejas y duraderas ya que sería DEMASIADO trabajo, por lo cual les pido que si por favor alguien sabe como solucionar este inconveniente de incompatibilidad me lo diga, pues ya no sé qué hacer con esto, lo peor de todo es que al dar "Enter+Ctrl" con Flash abierto para ejecutar la aplicación, no se generan mensajes de error, pero hemos notado que una vez corremos ambas aplicaciones integradas, no se da el paso de variables.

Quedo atento sus aportes y comentarios.

Muchas gracias.

  #2 (permalink)  
Antiguo 09/10/2010, 10:59
Avatar de Bandit
Moderador
 
Fecha de Ingreso: julio-2003
Ubicación: Lima - Perú
Mensajes: 16.726
Antigüedad: 20 años, 9 meses
Puntos: 406
Respuesta: Incompatibilidad de FlashVars en AS2 con AS3

Hola GUILLHERMOSOFT:
No se puede mezlar AS2 y 3 en la misma película ya que los 2 tienes diferentes nomenclaturas en sus script, lastimosamente tendrás que hacer todo en uno de los AS.

Espero haberte sido de ayuda.
__________________
Bandit.
Si no sabes estudia y si sabes enseña.
http://www.banditwebdesign.com/
  #3 (permalink)  
Antiguo 09/10/2010, 12:08
Avatar de TMeister
Crazy Coder
 
Fecha de Ingreso: enero-2002
Ubicación: En la Oficina
Mensajes: 2.880
Antigüedad: 22 años, 3 meses
Puntos: 193
Respuesta: Incompatibilidad de FlashVars en AS2 con AS3

Lo que dice Bandit es cierto, no se puede mezclar AS2 con AS3.

Lo que puedes hacer es cargar un SWF creado con AS2 en un SWF contenedor AS3

ActionScript3 tiene las llamadas "ActionScript Virtual Machine" AVM1 ejecuta (as1 y as2) y AVM2 ( as3).

Cita:
If the loaded content is an AVM1 SWF file (written using ActionScript 1.0 or 2.0), it cannot be cross-scripted by an AVM2 SWF file (written using ActionScript 3.0). However, you can communicate between the two SWF files by using the LocalConnection class.
Esto quiere decir puedes craer un contenedor AS3 el cual reciba tus parametros via FlashVars, cargue los 2 SWF la animacion AS3 y la app en as2.

Ahora al ser maquinas virtuales distintas no uedes acceder a los metodos y propiedades de tu swf AS2 para ello como lo dice la cita puedes usar localConnection para este proposito.

Mas info en la documentación Loader

Saludos!!
  #4 (permalink)  
Antiguo 17/10/2010, 23:37
 
Fecha de Ingreso: marzo-2009
Ubicación: Cali (Valle) - Colombia
Mensajes: 164
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: Incompatibilidad de FlashVars en AS2 con AS3

Ok, muchas gracias, ya estoy modificando una de mis dos aplicaciones de AS2 a AS3, en la cual tengo una serie de elementos y cada cada uno tiene asociado un identificador, el cual se debe enviar una vez se da click sobre el elemento, para loc aul estoy usando la siguiente función:

public function onEnviar(obj:Event)
{
// variables a enviar
var urlVars:URLVariables = new URLVariables();
urlVars.id = "14";

// opciones para el envío
var urlRequ:URLRequest = new URLRequest("paypal.php");
urlRequ.method = URLRequestMethod.POST;
urlRequ.data = urlVars;

// envío y detección de la respuesta
var urlLoad:URLLoader = new URLLoader();
urlLoad.load(urlRequ);

navigateToURL(urlRequ);
}

y al momento de llamar la función genero la siguiente línea

c141.addEventListener(MouseEvent.CLICK, onEnviar);

en la cual "c141" es el nombre de instancia que le asigné al elemento y el "14" en la quinta línea (urlVars.id = "14";), donde construyo la función, es el identificador asociado al elemento, necesito dejar este valor (número) variable, no fijo, para lo cual es necesario pasárselo a la función como un parámetro, pues el objetivo de crear funciones es reutilizar código, por lo cual no sería adecuado generar la misma función pero con nombre diferente para cada una de las instancia de mi aplicación, ante lo cual sería necesario que la función quedara más ó menos así:

public function onEnviar(obj:Event,identificadorInstancia)
{
// variables a enviar
var urlVars:URLVariables = new URLVariables();
urlVars.id = identificadorInstancia;

// opciones para el envío
var urlRequ:URLRequest = new URLRequest("paypal.php");
urlRequ.method = URLRequestMethod.POST;
urlRequ.data = urlVars;

// envío y detección de la respuesta
var urlLoad:URLLoader = new URLLoader();
urlLoad.load(urlRequ);

navigateToURL(urlRequ);
}

y al momento de llamar la función:

c141.addEventListener(MouseEvent.CLICK, onEnviar(14));//En el caso de la instancia "c141"

c151.addEventListener(MouseEvent.CLICK, onEnviar(15));//En el caso de la instancia "c151"

c161.addEventListener(MouseEvent.CLICK, onEnviar(16));//En el caso de la instancia "c161"

c171.addEventListener(MouseEvent.CLICK, onEnviar(17));//En el caso de la instancia "c171"

y así sucesivamente por cada instancia, pero al dar Ctrl+Enter se me imprime el siguiente error:

Main.as, Línea 98
1120: Acceso a una propiedad identificadorInstancia no definida.
c141.addEventListener(MouseEvent.CLICK, onEnviar(identificadorInstancia));

Main.as, Línea 98
1136: Número de argumentos incorrecto. Se esperaba 2.
c141.addEventListener(MouseEvent.CLICK, onEnviar(identificadorInstancia));

Vale la pena aclarar que Main.as es el nombre del archivo en el cual estoy manejando mi código y la línea 98 es desde donde llamo la función, es decir la que dice:

c141.addEventListener(MouseEvent.CLICK, onEnviar(identificadorInstancia));

Estoy trabajando en POO, todo mi código es el siguiente:


/*
*************************************
* ToolTip
* http://www.FlepStudio.org
* © Author: Filippo Lughi
* version 1.0
*************************************
*/
package
{
import flash.display.*;
import flash.events.*;
import flash.text.*;
import org.FlepStudio.ToolTip;

import flash.display.MovieClip;
import flash.net.*;


public class Main extends MovieClip
{
private var tool_tip:ToolTip;

private var clips_array:Array;

public var parametro14:String;


public function getFlashVars()
{
try
{
var paramObj:Object = LoaderInfo( this.root.loaderInfo ).parameters;
return( paramObj );
}
catch ( e:Error )
{
trace( "Error getting FlashVars" );
}
}

public function onEnviar(obj:Event,identificadorInstancia)
{
// variables a enviar
var urlVars:URLVariables = new URLVariables();
urlVars.id = identificadorInstancia;

// opciones para el envío
var urlRequ:URLRequest = new URLRequest("paypal.php");
urlRequ.method = URLRequestMethod.POST;
urlRequ.data = urlVars;

// envío y detección de la respuesta
var urlLoad:URLLoader = new URLLoader();
urlLoad.load(urlRequ);

navigateToURL(urlRequ);
}

public function Main()
{
addEventListener(Event.ADDED_TO_STAGE,init);

parametro14=getFlashVars().valor14;
parametro14 = (parametro14 != null)?parametro14:"no se ha recibido la variable valor14"; //Este parámetro tendrá el valor de valor14

if(parametro14=="0"){
c141.visible = true;
c142.visible = false;
}

else{
c141.visible = false;
c142.visible = true;
}

}

private function init(evt:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE,init);

stage.frameRate=31;

clips_array=new Array(clip_1_mc,clip_2_mc,clip_3_mc,clip_4_mc,c141 );

for(var i:int=0;i<clips_array.length;i++)
{
clips_array[i].mouseChildren=false;
clips_array[i].buttonMode=true;
clips_array[i].addEventListener(MouseEvent.MOUSE_OVER,onClipOver );
clips_array[i].addEventListener(MouseEvent.MOUSE_OUT,onClipOut);
}
}

private function onClipOver(evt:MouseEvent):void
{
c141.addEventListener(MouseEvent.CLICK, onEnviar(identificadorInstancia));

switch(evt.target)
{
case clip_1_mc:
if(parametro14=="1")
{
tool_tip=new ToolTip(0xFFCC00,0x000000,12,"Arial",'<b>Lorem ipsum GUILLERMO</b> dolor sit amet, consectetuer.'+'\n'+
'Morbi a lorem quis sapien tincidunt adipiscing. Proin vel sapien.');
}
else
{
tool_tip=new ToolTip(0xFFFFFF,0x000000,12,"Arial",parametro14);
//fondo, color fuente
}
addChild(tool_tip);
break;

case clip_2_mc:
tool_tip=new ToolTip(0xFFFFFF,0x000000,12,"Arial",'LUIS Lorem ipsum dolor sit amet, consectetuer.'+'\n'+
'Morbi a lorem quis sapien tincidunt adipiscing. Proin vel sapien.');
addChild(tool_tip);
break;

case clip_3_mc:
tool_tip=new ToolTip(0xFFFFFF,0x000000,12,"Arial",'LÓPEZ Ciao Ciao Ciao');
addChild(tool_tip);
break;

case clip_4_mc:
tool_tip=new ToolTip(0xFFFFFF,0x000000,12,"Arial",'TREJO<b>Lore m ipsum</b> dolor sit amet, consectetuer.'+'\n'+
'Morbi a lorem quis sapien tincidunt adipiscing. Proin vel sapien.');
addChild(tool_tip);
break;

case c141:
tool_tip=new ToolTip(0xFFFFFF,0x000000,12,"Arial",'Separa Casa 14');
addChild(tool_tip);
break;
}

}

private function onClipOut(evt:MouseEvent):void
{
if(tool_tip!=null)
{
tool_tip.destroy();
tool_tip=null;
}
}
}
}


No lo había puesto antes, ya que únicamente me había dedicado a postear la parte de código involucrada en el problema (ya que el resto del código hace referencia a cosas diferentes de lo que estoy mencionando en este tema), pues el resto aún las librerías que se llaman no tienen error alguno, pues antes de la modificación mencionada todo funciona bien y sin contratiempo.

Más necesito que dicho valor quede variable en mi función, les agradecería muchísimo si por favor me pueden colaborar, ya que es lo único que me falta y me ha tenido unas buenas horas frente al computador sin obtener los resultados esperados.

Etiquetas: incompatibilidad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:06.