Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Novato con java, problema de scope?

Iniciado por wintermute83, 06 de Septiembre de 2010, 08:14:06 PM

« anterior - próximo »

wintermute83

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!

flipper83

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.
un cobarde forero en el tanatorio al mes sería un placentero trofeo digno de merecer

wintermute83

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!

flipper83

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.
un cobarde forero en el tanatorio al mes sería un placentero trofeo digno de merecer

Juan Mellado

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

flipper83

es eso XD, porq no lo ha detectado el compilador?? usa un IDE muchacho, no compiles a pelo XD
un cobarde forero en el tanatorio al mes sería un placentero trofeo digno de merecer

wintermute83

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!







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.