Bueno, he llegado a un punto de desesperación, no entiendo que puede estar ocurriendo en este código para que no funcione, he probado mil cosas, he buscado y requetebuscado por todas partes y no encuentro nada. La cuestion básica es que tengo un problema con las variables. En el código que os implemento a continuación lo que hago es hacer una llamada a una base de datos (esto lo hace bien) y mediante las variables retornadas hago unos cálculos, en concreto es sobre velocidad del viento, el código es muy sencillo de entender. Lo que pretendo en definitiva es finalmente dibujar la dirección del viento y unas cuantas cosas más pero no consigo que haga nada de eso... y antes de agregar el tema de la llamada a la BD si que funcionaba... Lo que he observado es que no se hablan las variables dentro de la función que "recibe" los datos de la BD y el resto del código fuera de la funcion porque la variable 'v' no es capaz de leerla fuera de esta función y eso que he probado con _root.v _global.v y un ¿millon? de cosas mas pero nada que no hay manera.
Estoy seguro de que tiene que ser una estupidez... pero no consigo verlo!
Aqui viene el peacho codigo y antetodo muchas muchisimas gracias a TODOS...
Código :
//Funciones
function modulo(fvx,fvy) {
var a:Number = Number(fvx);
var b:Number = Number(fvx);
a=(Math.abs(a));a=a*a;
b=(Math.abs(b));b=b*b;
return Math.sqrt(a+b);
};
function direccion(fvx,fvy) {
var fd=(Math.atan(fvx/fvy))*180/Math.PI;
if (fd<0 & fvy>0) {
fd=360+fd;
} else if (fd<0 & fvy<0) {
fd=180+fd;
} else if ( fd>0 & fvy<0) {
fd=180+fd;
}
return Math.round(fd);
};
//#######################################
// Fecha de hoy para enviar a la BD
var today_date:Date = new Date();
if ((today_date.getMonth()+1)<10) {
var aux:String = ("0"+(today_date.getMonth()+1));
} else {
var aux:Number = (today_date.getMonth()+1);
}
if (today_date.getDate()<10) {
var aux2:String = (aux+"-0"+today_date.getDate());
} else {
var aux2:String = (aux+"-"+today_date.getDate());
}
var pdata:String = (today_date.getFullYear()+"-"+aux2);
// hora UTC
var horaUTC:Number = today_date.getUTCHours();
// Enviamos i Recibimos los datos del servidor de la BD
envio = new LoadVars();
recibir = new LoadVars();
envio.dia=pdata;
envio.hora=horaUTC;
envio.action="vent";
envio.sendAndLoad("./FLASH_MYSQL/consulta.php", recibir, "POST");
recibir.onLoad = function(exito) {
if (exito) {
switch (this.opcion) {
case "0" :
mensaje_txt = "No hay predicción";
break;
case "1" :
mensaje_txt = "Datos correctos";
inivx = Number(this.vx);
inivy = Number(this.vy);
inievx = Number(this.errorvx);
inievy = Number(this.errorvy);
mdata = this.pdata;
break;
default :
mensaje_txt = "no hay conexión";
break;
};
} else {
mensaje_txt = "Error en el Script";
};
// c es para seleccionar imagen de fondo en nudos
c = modulo(Math.abs(inivx)+inievx,Math.abs(inivy)+inievy);
// modulo de la velocidad (predicción)
v = Math.round(modulo(inivx,inivy));
// dirección (predicción)
d = direccion(inivx,inivy);
// velocidad máxima i mínima
vmax=Math.round(modulo(Math.abs(inivx)+inievx,Math.abs(inivy)+inievy));
vmin=Math.round(modulo(Math.abs(inivx)-inievx,Math.abs(inivy)-inievy));
if ( v<=3 ) {
vmax='variable';
} else {
vmax=vmax+' / '+vmin;
};
// punto de partida para dibujar
base = 200;
// imagen de fondo: 5/20/40 nudos
if ( c<=5 ) {
fons.gotoAndStop(1);
vx = Number(base)+Number(inivx)*40;
vy = Number(base)-Number(inivy)*40;
evx = Number(inievx)*40;
evy = Number(inievy)*40;
} else if ( c>5 & c<=20 ) {
fons.gotoAndStop(2);
vx = Number(base)+(Number(inivx)*10);
vy = Number(base)-(Number(inivy)*10);
evx = Number(inievx)*10;
evy = Number(inievy)*10;
} else if ( c>20 ) {
fons.gotoAndStop(3);
vx = Number(base)+(Number(inivx)*5);
vy = Number(base)-(Number(inivy)*5);
evx = Number(inievx)*5;
evy = Number(inievy)*5;
}
};
// dibujamos error en la dirección
this.createEmptyMovieClip("dir_mc", this.getNextHighestDepth());
dir_mc.beginFill(0xffff00,30);
dir_mc.moveTo(Number(base), Number(base));
if ( inivx>=0 & inivy>=0 ) {
if ( (vx-evx)<200 ) {
dir_mc.lineTo(vx-evx,vy+evy);
}
dir_mc.lineTo(vx-evx,vy-evy);
dir_mc.lineTo(vx+evx,vy-evy);
dir_mc.lineTo(vx+evx,vy+evy);
if ( (vy+evy)>200 ) {
dir_mc.lineTo(vx-evx,vy+evy);
}
} else if ( inivx<0 & inivy>0 ) {
if ( (vx+evx)>200 ) {
dir_mc.lineTo(vx+evx,vy+evy);
}
dir_mc.lineTo(vx+evx,vy-evy);
dir_mc.lineTo(vx-evx,vy-evy);
dir_mc.lineTo(vx-evx,vy+evy);
if ( (vy+evy)>200 ) {
dir_mc.lineTo(vx+evx,vy+evy);
}
} else if ( inivx<0 & inivy<0 ) {
if ( (vx+evx)>200 ) {
dir_mc.lineTo(vx+evx,vy-evy);
}
dir_mc.lineTo(vx+evx,vy+evy);
dir_mc.lineTo(vx-evx,vy+evy);
dir_mc.lineTo(vx-evx,vy-evy);
if ( (vy-evy)<200 ) {
dir_mc.lineTo(vx+evx,vy-evy);
}
} else if ( inivx>0 & inivy<0 ) {
if ( (vx-evx)<200 ) {
dir_mc.lineTo(vx-evx,vy-evy);
}
dir_mc.lineTo(vx-evx,vy+evy);
dir_mc.lineTo(vx+evx,vy+evy);
dir_mc.lineTo(vx+evx,vy-evy);
if ( (vy-evy)<200 ) {
dir_mc.lineTo(vx-evx,vy-evy);
}
}
dir_mc.lineTo(base,base);
dir_mc.endFill();
// dibujamos error en el area
this.createEmptyMovieClip("area_mc", this.getNextHighestDepth());
area_mc.beginFill(0xff0000,20);
if ( inivx>=0 & inivy>=0 ) {
area_mc.moveTo(vx-evx, vy+evy);
area_mc.lineTo(vx-evx, vy-evy);
area_mc.lineTo(vx+evx, vy-evy);
area_mc.lineTo(vx+evx, vy+evy);
area_mc.lineTo(vx-evx, vy+evy);
dmax=direccion(inivx+inievx,inivy-inievy);
dmin=direccion(inivx-inievx,inivy+inievy);
} else if ( inivx<0 & inivy>0 ) {
area_mc.moveTo(vx+evx, vy+evy);
area_mc.lineTo(vx-evx,vy+evy);
area_mc.lineTo(vx-evx,vy-evy);
area_mc.lineTo(vx+evx,vy-evy);
area_mc.lineTo(vx+evx,vy+evy);
dmax=direccion(inivx+inievx,inivy+inievy);
dmin=direccion(inivx-inievx,inivy-inievy);
} else if ( inivx<0 & inivy<0 ) {
area_mc.moveTo(vx+evx, vy-evy);
area_mc.lineTo(vx+evx,vy+evy);
area_mc.lineTo(vx-evx,vy+evy);
area_mc.lineTo(vx-evx,vy-evy);
area_mc.lineTo(vx+evx,vy-evy);
dmax=direccion(inivx-inievx,inivy+inievy);
dmin=direccion(inivx+inievx,inivy-inievy);
} else if ( inivx>0 & inivy<0 ) {
area_mc.moveTo(vx-evx,vy-evy);
area_mc.lineTo(vx+evx,vy-evy);
area_mc.lineTo(vx+evx,vy+evy);
area_mc.lineTo(vx-evx,vy+evy);
area_mc.lineTo(vx-evx,vy-evy);
dmax=direccion(inivx-inievx,inivy-inievy);
dmin=direccion(inivx+inievx,inivy+inievy);
}
area_mc.endFill();
if ( recibir.v<=3 ) {
dmax='variable';
} else {
dmax=dmax+' / '+dmin;
};
// ejes
this.createEmptyMovieClip("linvx_mc", this.getNextHighestDepth());
linvx_mc.lineStyle(0, 0xffffff, 60, true, "none", "round", "miter", 1);
linvx_mc.moveTo(vx, base);
linvx_mc.lineTo(vx,vy);
this.createEmptyMovieClip("linvy_mc", this.getNextHighestDepth());
linvy_mc.lineStyle(0, 0xffffff, 60, true, "none", "round", "miter", 1);
linvy_mc.moveTo(base, vy);
linvy_mc.lineTo(vx,vy);
// Vector viento
this.createEmptyMovieClip("vector_mc", this.getNextHighestDepth());
vector_mc.lineStyle(2, 0x0000ff, 150, true, "none", "round", "miter", 1);
vector_mc.moveTo(base, base);
vector_mc.lineTo(vx,vy);
//control de errores en dirección
if ( Math.abs(inivx)<=inievx & Math.abs(inivy)<=inievy ){
dir_mc._alpha = 0;
} else {
dir_mc._alpha = 40;
}; 