Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





reutilizar un array

Iniciado por wintermute83, 19 de Octubre de 2010, 04:21:52 PM

« anterior - próximo »

wintermute83

Bueno, pues la pregunta de hoy tambien es bastante sencilla:

la libria que uso (slick2d) tiene una clase que requiere un array de objetos tipo Image, y devuelve un objeto del tipo Animation.

Como lo que busco es crear estos objetos animation y los array de imagenes no me interesan, habia pensado reutilizar el nombre del array de imagenes. Os pongo lo que quiero hacer.

        Image [] imageSet = {imMancubusList.get(2)};    // coge la imagen de un arrayList donde tengo todas las imagenes guardadas
        anMancubusList.add(new Animation(imageSet,1000,false));      // esta es la llamada a la clase que requiere un array de Image

        imageSet=null;
        Image [] imageSet = {imMancubusList.get(0), imMancubusList.get(1), imMancubusList.get(2), imMancubusList.get(3),            imMancubusList.get(4),   imMancubusList.get(5)};
        int [] duration = {150, 150, 150, 150, 150, 150};
        anMancubusList.add(new Animation(imageSet,duration,false));

pero esto no compila porque imageSet ya está definido. Una primera aproximación seria crear un nuevo array para cada objeto Animation.

        Image [] imageSet1 = {imMancubusList.get(2)};
        anMancubusList.add(new Animation(imageSet1,1000,false));

        imageSet1=null;

        Image [] imageSet2 = {imMancubusList.get(0), imMancubusList.get(1), imMancubusList.get(2), imMancubusList.get(3), imMancubusList.get(4),  imMancubusList.get(5)};
        int [] duration = {150, 150, 150, 150, 150, 150};
        anMancubusList.add(new Animation(imageSet2,duration,false));

De esta manera compila y todo va bien, pero cuando el juego empiece a tener mas y mas se dara la situación en la que este creando el arraySet300. En verdad esos arrays no los necesito una vez que tengo creado el objeto Animation. Por eso me gustaría reutilizar el nombre imageSet, al igual que si podemos hacer con variables tipo int u objetos String.

Un saludo a todos

Vicente

Cambia tu segundo uso de imageSet por esto:

imageSet = {imMancubusList.get(0), imMancubusList.get(1), imMancubusList.get(2), imMancubusList.get(3),            imMancubusList.get(4),   imMancubusList.get(5)};

Sin volver a definir la variable y listo :)

wintermute83

#2
Vicente, tal como tu me dices recibo un  "illegal start of expression".
Pego el código tal como lo tengo:

Image [] imageSet = {imMancubusList.get(2)};
animation = new Animation(imageSet,1000,false);
animMancubusList.add(animation);
animMancubusList.add(getFlippedAnim(animation));

imageSet = {imMancubusList.get(0), imMancubusList.get(1), imMancubusList.get(2), imMancubusList.get(3), imMancubusList.get(4),       imMancubusList.get(5)};

Y ahí es donde dice que no compilará..

Vicente

En el segundo array seguramente ya no puedas usar la sintaxis {....}, si no que tendrás que hacer un new del tamaño y meter los elementos a mano.

wintermute83

Parece que efectivamente no puedo.
Por mantenerlo simple he optado por continuar añadiendo arrays, y que el compilador se deshaga de ellos automaticamente.

jmcots

Hola wintermute83,

en C++, puedes agrupar un trozo de código entre { y }, de tal manera que al llegar al final del bloque, se libera la memoria demandada.

Creo que en Java esto también es así, de esta manera podrías realizar la inicialización dentro de un bloque:

{
    Image [] imageSet = {imMancubusList.get(2)};
    anMancubusList.add(new Animation(imageSet,1000,false));
}

{
    Image [] imageSet = {imMancubusList.get(0), imMancubusList.get(1), imMancubusList.get(2), imMancubusList.get(3)};
    int [] duration = {150, 150, 150, 150, 150, 150};
    anMancubusList.add(new Animation(imageSet,duration,false));
}


Así puedes usar el mismo nombre todo el rato y, en caso que sea posible, se liberará memoria lo antes posible. Pero te va a quedar  un código un poco más largo...

Saludos!

wintermute83

gracias por el apunte jmcots, funciona sin problemas.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.