ActionScript - Problema al colorear objetos por separado

 
Vista:

Problema al colorear objetos por separado

Publicado por tipitipi (2 intervenciones) el 09/01/2010 19:50:55
Hola a todos:

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 ó 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 aqui 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 codigo 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.

Expero haberme explicado con claridad.

Muchas gracias a todos y saludos cordiales!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Problema al colorear objetos en base a consulta PHP

Publicado por Alejandro (369 intervenciones) el 27/06/2023 16:43:50
El problema que estás experimentando parece estar relacionado con el manejo de variables y el flujo de ejecución en tu código. Veo algunas áreas donde puedes realizar ajustes para resolver el problema:

1. En el archivo "Script.as":
- Elimina la línea `destroyObject(datos);` ya que no es necesaria y puede causar problemas.
- Asegúrate de declarar las variables `AuxObjeto`, `AuxIdLLenado` y `AuxVariable` utilizando `var` para evitar que se conviertan en variables globales. Por ejemplo: `var AuxObjeto = InObj;`.

2. En el archivo "ConsultaSQL.php":
- Después de ejecutar la consulta `ociexecute($AuxResultado, OCI_DEFAULT);`, asegúrate de verificar si se encontraron resultados utilizando `ocifetch()` y luego consultar el valor de la variable. Puedes agregar una condición similar a esta:
1
2
3
4
5
if (ocifetch($AuxResultado)) {
    $AuxEstado = ociresult($AuxResultado, $AuxNombreVar);
} else {
    $AuxEstado = 0;
}

3. En el archivo .fla:
- Cambia las llamadas a `fn_ColorFondo` para que se realicen en diferentes frames de la línea de tiempo en lugar de hacerlas todas en el segundo y tercer fotograma. Por ejemplo, puedes colocar una llamada en cada fotograma individualmente.

Con estos ajustes, el flujo de ejecución y las variables deberían manejarse correctamente y cada objeto debería colorearse de acuerdo con su consulta específica en la base de datos.

Recuerda también verificar que los nombres de instancia y los valores de los parámetros en tus llamadas sean correctos.

Espero que esta orientación te ayude a resolver el problema. ¡Buena suerte con tu proyecto!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar