ActionScript - S.o.S con función

 
Vista:

S.o.S con función

Publicado por falkomari (1 intervención) el 19/02/2008 20:45:31
Buenas noches, no se si alguien mep puede hechar un cable.
Tengo un problema con el código que muestro a continuación.
mi intención es cargar desde un fichero xml una serie de fotospara luego escalarlas a unos tamaños, para hacer una galería. El problema es que leo el xml, sin problemas pero luego no soy capaz de reescalar la foto. El código que tengo preparado sobre el Timeline es

anchoOriginal = 500;
altoOriginal = 400;
//************************************************//
//PRINCIPAL//
xmlData = new XML();//Nuevo objeto XML
xmlData.ignoreWhite = true;//Ignorar espacios en blanco
xmlData.onLoad = loadXML;//LLamamos a loadXML()
xmlData.load("galeria/images.xml");//cargamos XML
xmlData.onLoad=function(){
xmlNode = this.firstChild;
image = [];
tit = [];
coment = [];
total = xmlNode.childNodes.length;
for (i=0; i<total; i++) {
image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
tit[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
coment[i] = xmlNode.childNodes[i].childNodes[2].firstChild.nodeValue;
}
picture.loadMovie(image[0],1);
rescalar();
}
tit_txt.text = tit[0];
desc_txt.text = coment[0];
picture_num();


//************************************************//
//FUNCION QUE CONTROLA NUMERACION DE IMAGENES//
function picture_num() {
current_pos = p+1;
pos_txt.text = current_pos+" / "+total;
}
//*************************************************//

function rescalar() {
picture._xscale = picture._yscale=100;
//Nos aseguramos que partimos de la escala base
//Dictaminamos si debemoscalcular el ancho o el alto
trace(anchoOriginal/altoOriginal);
trace(picture._width/picture._height);
if ((anchoOriginal/altoOriginal)<(picture._width/picture._height)) {
trace("Foto Ancha");// La foto es ancha por lo que el ancho=500 y el alto lo calculamos
alto = (anchoOriginal*picture._height)/picture._width;
picture._width = 500;
picture._height = alto;
trace(alto);
} else {
trace("Foto Alta");
ancho = (anchoOriginal*picture._width)/picture._height;
picture._width = ancho;
picture._height = 400;
trace(ancho);
}
escalado = true;

}
Muchas gracias por adelantado.
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 reescalar imágenes en una galería cargada desde XML

Publicado por Alejandro (369 intervenciones) el 23/06/2023 23:02:48
Buenas noches.

En el código que proporcionaste, parece que estás tratando de cargar imágenes desde un archivo XML y luego escalarlas en una galería. Sin embargo, no estás obteniendo los resultados esperados al reescalar las imágenes. Hay algunos aspectos que podrían corregirse en tu código.

Primeramente, es importante asegurarse de que la carga del archivo XML se haya completado antes de intentar acceder a sus datos. En tu código actual, estás llamando a la función `rescalar()` justo después de cargar el XML, pero esto puede resultar en un problema, ya que la carga del XML puede no haber finalizado aún.

Para solucionar esto, es recomendable mover la llamada a la función `rescalar()` dentro de la función `loadXML()`, que es donde has definido la lógica después de cargar el XML. Esto asegurará que la carga se haya completado antes de intentar reescalar las imágenes.

Aquí tienes una versión corregida del código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
anchoOriginal = 500;
altoOriginal = 400;
 
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("galeria/images.xml");
 
function loadXML(success:Boolean):Void {
    if (success) {
        xmlNode = xmlData.firstChild;
        image = [];
        tit = [];
        coment = [];
        total = xmlNode.childNodes.length;
        for (i = 0; i < total; i++) {
            image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
            tit[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
            coment[i] = xmlNode.childNodes[i].childNodes[2].firstChild.nodeValue;
        }
        picture.loadMovie(image[0], 1);
        rescalar();
        tit_txt.text = tit[0];
        desc_txt.text = coment[0];
        picture_num();
    } else {
        trace("Error al cargar el archivo XML.");
    }
}
 
function rescalar():Void {
    picture._xscale = picture._yscale = 100;
 
    var ancho:Number = picture._width;
    var alto:Number = picture._height;
 
    if ((anchoOriginal / altoOriginal) < (ancho / alto)) {
        alto = (anchoOriginal * alto) / ancho;
        picture._width = anchoOriginal;
        picture._height = alto;
    } else {
        ancho = (altoOriginal * ancho) / alto;
        picture._width = ancho;
        picture._height = altoOriginal;
    }
 
    escalado = true;
}

En esta versión corregida, se movió la llamada a `rescalar()` dentro de la función `loadXML()`. Además, se modificaron las declaraciones de las variables `ancho` y `alto` en la función `rescalar()` para asegurarse de que se tomen los valores correctos de la imagen cargada.

Espero que esta solución te ayude a reescalar las imágenes correctamente en tu galería. ¡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