Foros - Stratos

Stratos => Principiantes => Mensaje iniciado por: wintermute83 en 06 de Septiembre de 2010, 08:14:06 PM

Título: Novato con java, problema de scope?
Publicado por: wintermute83 en 06 de Septiembre de 2010, 08:14:06 PM
Hola a tod@s chic@s y chic@s.
Vengo con una duda de novato, y es que estoy empezando a programar en java con slick2d.
He leido un libro sobre Java y he practicado un par de programillas, pero como el objetivo es hacer un juego 2d me he lanzado a la piscina.

A la hora de pasar una referencia tipo imagen a un objeto Netbeans me dice que no reconoce el simbolo. tal y como esta todo, no entiendo porque, he revisado el tema de visibilidad y alcances pero no creo que sea eso, tambien he revisado la ortografia..

Aqui esta el codigo:

//cargo librerias
....

public class test extends BasicGame
{
     public Image imDisparo=null;                 
     public disparo shoot=null;

     .....

     public test()
     {
         super("Wizard game");
     }

     public static void main(String [] arguments)
     {
         try
         {
             //valores para configurar el engine ....
         }
         catch (SlickException e)
         {
             e.printStackTrace();
         }
     }

     @Override
     public void init(GameContainer container) throws SlickException
     {
         //CARGA DE IMAGENES

         Image arboreo1 = new Image("data/arboreo1.png");
         imDisparo = new Image("data/disparo.png");
         
         .....


     }

     @Override
     public void update(GameContainer container, int delta) throws SlickException
     {

         //LOGICA DEL JUEGO
          .....

         switch ( playerState ) {
             case 0:
             ......
             case 2:
                 if ( orientacion == 0 ) { sprite = shootRight; }
                 else { sprite = shootLeft; }
                 shoot = new disparo(x,y,0.5f,orientacion,ImDisparo);       <===== aqui me dice que no encuentra el simbolo ImDisparo
                 sprite.restart();
                 while ( sprite.isStopped() == false )
                 {
                     sprite.update(delta);
                 }
                 playerState = 0;
                 break;
         }
     
     }



     public void render(GameContainer container, Graphics g) throws SlickException
     {
         sprite.draw((int)x, (int)y);
     }

public class disparo {

     private float x,y,vel; int orientacion;
     private Image sprite;

     public disparo(float x,float y,float vel,int orientacion,Image sprite)
     {
         this.x=x; this.y=y; this.vel=vel; this.orientacion=orientacion;
         this.sprite=sprite;
     }

     public void update(GameContainer container, int delta) throws SlickException
     {
         if (orientacion==0) { x+=vel*delta; } else { x-=vel*delta; }
//         if ((x<-1000)&&(x>1000)){
//                                                                                       <====== que puedo decirle para borrar el objeto cuando se cumpla el if?
//         }

     }



     public void render(GameContainer container, Graphics g) throws SlickException
     {
         sprite.draw((int)x, (int)y);
     }

}

}


Eso es todo muchas gracias!
Título: Re: Novato con java, problema de scope?
Publicado por: flipper83 en 07 de Septiembre de 2010, 08:30:10 AM
si pones la traza del error que te dá mucho mejor. Porcierto para que estos no te coman di que es un error de sintaxis no de ortografia xD.
Título: Re: Novato con java, problema de scope?
Publicado por: wintermute83 en 07 de Septiembre de 2010, 10:24:36 PM
XDDD como decía no creo que sea nada con la sintaxis, y espero que te refieras a esto con lo de la traza  del error, java.lang.RuntimeException: Uncompilable source code - cannot find symbol.

gracias por la rapida respuesta!
Título: Re: Novato con java, problema de scope?
Publicado por: flipper83 en 08 de Septiembre de 2010, 08:35:10 AM
Usas netbeans? o eclipse?? porq tiene pinta de ser el típico error de librerias que no están agregadas al classpath de ejecución.
Título: Re: Novato con java, problema de scope?
Publicado por: Juan Mellado en 08 de Septiembre de 2010, 09:03:59 AM
Creo que es algo bastante más simple.

La variable está declarada como "imDisparo" (i minúsculas) y se está intentando acceder a ella como "ImDisparo" (i mayúsculas).

El compilador eleva el error porque Java distingue entre mayúsculas y minúsculas.

Saludos
Título: Re: Novato con java, problema de scope?
Publicado por: flipper83 en 08 de Septiembre de 2010, 01:07:38 PM
es eso XD, porq no lo ha detectado el compilador?? usa un IDE muchacho, no compiles a pelo XD
Título: Re: Novato con java, problema de scope?
Publicado por: wintermute83 en 08 de Septiembre de 2010, 03:11:56 PM
Estoy usando Netbeans.
Juan, tienes razón y en el texto que he copiado había error de sintaxis. Pero aun escribiendolo bien sigue diciendo lo mismo.
Si declaro la variable como miembro dato el programa compila sin errores ( aunque no hace lo que quiero.. )
Esto es:


public class test extends BasicGame
{
     private TiledMap grassMap;
     ...
     public Image imDisparo;              <-- miembro dato

  public test()
     {
         super("Wizard game");
     }

public static void main(String [] arguments)
     {
     ...
     }

public void init(GameContainer container) throws SlickException
     {
         //CARGA DE IMAGENES
         Image [] movementUpL = {new Image("data/manc_ul1.png"), new Image("data/manc_ul2.png"), new Image("data/manc_ul3.png"),
                                 new Image("data/manc_ul5.png"), new Image("data/manc_ul6.png")};
         
         ....

         imDisparo = new Image("data/disparo.png");                <----- asigno valor

         ...

@Override
public void update(GameContainer container, int delta) throws SlickException
     {
      ....

            case 2:
                 if ( orientacion == 0 ) { sprite = shootRight; }
                 else { sprite = shootLeft; }
                 disparo shoot = new disparo(x,y,0.5f,orientacion,imDisparo);                  <------- le paso la referencia.
                 sprite.restart();
                 playerState = 0;
                 break;
         }
     
     }


Lo que no entiendo es porque si puedo usar todas las variables que declaro dentro de la funcion Init en la funcion update pero no puedo usar imDisparo.
- La unica diferencia en el uso que le doy respecto de las otras variables es que esta se la paso a otro objeto diferente.


pd: puede que os esté preguntando una perogrullada pero os pido paciencia que llevo con java muy poco!