Colorear objetos en flash de forma controlada

Hola:
Tengo un problema con action script y no entiendo por qué.
Estoy desarrollando una aplicación en flash en la que mediante un archivo auxiliar php ( que se llama desde el propio flash ) consulto a una base de datos un campo concreto y en base al resultado que el php le devuelva a flash, coloreo un campo de un color o de otro. Esto me funciona correctamente, pero para un solo campo.
Por tanto lo que pensé fue en crear una función a la que se le pasasen los parámetros de la consulta sql y el campo que quiero colorear en base a esa consulta para poder atacar al objeto que yo quiera y aquí me he encontrado un problema que no se como solucionar.
Adjunto el código de todos los ficheros que he creado:
--------------------------------------------------------------------------------------------------------
Fichero action script auxiliar "Script.as":
_global.fn_ColorFondo = function(InObj, InIdLLenado, InVariable)
 {  
 //Declaramos Variables Auxiliares
 AuxObjeto = InObj;
 AuxIdLLenado = InIdLLenado;
 AuxVariable = InVariable; 
 //Declaramos Variables Auxiliares
 //Creamos Nuevo objeto para comunicarnos con el PHP
 datos= new LoadVars();
 datos.Id_LLenado = AuxIdLLenado;
 datos.Nombre_Variable = AuxVariable;
 datos.onLoad = function()
  {
  texto = datos.resultado;
  }
 datos.sendAndLoad("ConsultaSQL.php", datos, "POST");
 //Definimos el Objeto
 miobjeto = new Color (_root.AuxObjeto);
 if ( texto == 1 ) {
  micolor = 0xFFFF00;
  miobjeto.setRGB(micolor);
  }
 else {
  micolor = 0xFF3300;
  miobjeto.setRGB(micolor);
  }
 destroyObject(miobjeto);
 destroyObject(datos); 
}
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
En el fichero "ConsultaSQL.php":
<?php
 //Conectamos con oracle
 fn_ConectarOracle($AuxConnOracle);
 //Declaración de Variables Auxiliares
 $AuxCantidad = 0;
 $AuxNombreVar = "";
 $AuxIdLLenado = 0;
 $AuxEstado = 0;
 //Declaración de Variables Auxiliares 
 //Recuperar Valores que se envían desde Flash
 $AuxIdLLenado = $_POST['Id_LLenado']; 
 $AuxNombreVar = $_POST['Nombre_Variable'];
 //Asegurar Valores de Navegación
 if ( $AuxIdLLenado == NULL )  {$AuxIdLLenado = 0;}
 if ( $AuxNombreVar == NULL )  {$AuxNombreVar = "VAR_RELLENO";}
 //Primeramente chequeamos que la variable existe
 $AuxConsulta = "SELECT COUNT(*) AS CANTIDAD FROM TABLA  WHERE ID_LLENADO = ".$AuxIdLLenado;
 $AuxResultado = ociparse($AuxConnOracle, $AuxConsulta);
 ociexecute($AuxResultado, OCI_DEFAULT);
 ocifetch($AuxResultado);
 $AuxCantidad = ociresult($AuxResultado, "CANTIDAD");
 //Si la Variable NO EXISTE, se lo decimos a Flash
 if ( $AuxCantidad != 1 )
  {
  //Devolver el Resultado de la Variable a "0" a Flash
  echo "resultado=0";
  }
 //Si la Variable existe la consultamos
 if ( $AuxCantidad == 1 )
  {
  $AuxConsulta = "SELECT * FROM TABLA WHERE ID_LLENADO = ".$AuxIdLLenado;  
  $AuxResultado = ociparse($AuxConnOracle, $AuxConsulta);
  ociexecute($AuxResultado, OCI_DEFAULT);
  ocifetch($AuxResultado);
  $AuxEstado = ociresult($AuxResultado, $AuxNombreVar);
  //Devolver el Resultado de la Variable a Flash
  echo "resultado=".$AuxEstado;
  }
 //Para registrar lo que le devolvemos al php 
 $AuxInsert = "INSERT INTO TABLA_TEST_FLASH ( ID, NOMBRE ) VALUES ( SECUENCIA.NEXTVAL, 'Id_LLenado: ".$AuxIdLLenado." - Nombre_Var: ".$AuxNombreVar." - Estado Variable: ".$AuxEstado."' )";
 $AuxResultado = ociparse($AuxConnOracle, $AuxInsert);
 ociexecute($AuxResultado, OCI_DEFAULT);
 ocicommit($AuxConnOracle);  
 //Desconectamos de Oracle 
 fn_DesconectarOracle($AuxConnOracle);
?>
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
Y finalmente el código del archivo .fla:
En el primer fotograma: #include "Script.as" ( Para poder utilizar la función )
En el segundo y tercer fotograma: ( del tercer fotograma salta con un gotoAndPlay al fotograma numero 02 para refrescar continuamente el estado de los campos en base de datos )
fn_ColorFondo("Objeto_01", 1, "SIN_MODO");
trace("----------------------------------------------");
fn_ColorFondo("Objeto_02", 2, "SIN_MODO");
trace("----------------------------------------------");
fn_ColorFondo("Objeto_03", 3, "SIN_MODO");
trace("----------------------------------------------");
fn_ColorFondo("Objeto_04", 4, "SIN_MODO");
trace("----------------------------------------------");
--------------------------------------------------------------------------------------------------------
*El comportamiento del flash es curioso. Todos los objetos se ponen del color que se obtenga en la ultima llamada a la función "fn_ColorFondo" ( para este caso aqui expuesto, todos los objetos se pondrán del mismo color que el Objeto_04 ).
Todas las trazas que ponga se generan de una forma coherente, por lo que no encuentro la explicación a lo que me está ocurriendo.
Experto haberme explicado con claridad.
Muchas gracias saludos cordiales!

1 respuesta

Respuesta
Para repasarte todos los scripts enteros detalamente tardo más que crearlos de nuevo..
El problema que describes parece que sea lectura incorecta de la BD.
Es decir que con el bucle que cargas las variables (colores), siempre recore toda la bd y aplica ultimo, deberías decirle que cada objeto coloreado que coja su linea de la BD.
¿A - de que color se te ponen objetos?
¿B - amarillo? ¿Rojo? ¿Negro?
¿C - cuantas lineas tiene la tabla en BD y con que colores?
¿De - cuantos objetos tienes en la escena?
Otra cosa:
En la linea: function(InObj, InIdLLenado, InVariable) defines parametros de funcion pero en fla no tienes variables en estas funciones, sino parametro de expresion exacta:
fn_ColorFondo("Objeto_04", 4, "SIN_MODO");

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas