title: LibGDX stage coordinates change on window resize
body: <p>I have seen lots of topics on LibGDX and screen/cam coordinates and also some on window resizing, but I just can't find the solution to the following problem I have.</p>
  
  <p>When making a basic stage and a basic actor in this stage, say windowsize 480x320, everything is OK. I can click my actor and it will respond. But when I resize my window, say to 600x320, everything <em>looks</em> right, but my clicklistener is not working anymore. Also, the stage coordinates are moved or messed up.</p>
  
  <p>I use the following code:</p>
  
  <pre><code>stage.addListener(new InputListener() {
      public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
  
          //determine if actor was hit
          System.out.println(stage.hit(x, y, true));
          return true;
      }
  });
  </code></pre>
  
  <p>Also, I am resizing my stage camera viewport to correspond to the window:</p>
  
  <pre><code>    stage.getCamera().viewportWidth = Gdx.graphics.getWidth();
      stage.getCamera().viewportHeight = Gdx.graphics.getHeight();
  </code></pre>
  
  <p>So when resizing, I get the desired effect on screen, but my listener does not respond - the actor seems 'offset' of where I am clicking. What am I doing wrong? Should I move my actor or my cam, or zoom my cam according to the resize? Can someone please explain this to me? </p>
  
  <p>Thanks a lot in advance!</p>
  
  <p>EDIT: below is the complete code of my class.</p>
  
  <pre><code>public class HelpMePlease implements ApplicationListener{
  
  // A standard simple Actor Class
  class CustomActor extends Actor {
  
      Texture texture = new Texture(Gdx.files.internal("data/testTex2.png"));
      TextureRegion pixelTexture = new TextureRegion(texture, 0, 0, 1, 1);
      Sprite sprite = new Sprite(texture);
  
      public CustomActor() {
          setWidth(128);
          setHeight(128);
          setBounds(getX(), getY(), getWidth(), getHeight());
      }
  
      @Override
      public void draw(SpriteBatch batch, float parentAlpha) {
          batch.draw(sprite, getX(), getY(), 0f, 0f, getWidth(), getHeight(), getScaleX(), getScaleY(), getRotation());
      }
  }
  
  public Stage stage;
  public CustomActor actor;
  
  @Override
  public void create() {
  
  
      stage = new Stage(480,320,true);
  
      actor = new CustomActor();
  
      stage.addListener(new InputListener() {
          public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
  
              //determine if actor was hit
              System.out.println(stage.hit(x, y, true));
              return true;
          }
      });
  
      Gdx.input.setInputProcessor(stage);
      stage.addActor(actor);
  
  }
  
  @Override
  public void resize(int width, int height) {
  
      //resize cam viewport
      stage.getCamera().viewportWidth = Gdx.graphics.getWidth();
      stage.getCamera().viewportHeight = Gdx.graphics.getHeight();
  
  }
  
  @Override
  public void render() {
      Gdx.gl.glClearColor(0, 0, 0, 1);
      Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
      stage.getCamera().update(); //just to be sure, I don't know if this is necessary
      stage.act();
      stage.draw();
  }
  
  @Override
  public void pause() {
      // TODO Auto-generated method stub
  
  }
  
  @Override
  public void resume() {
      // TODO Auto-generated method stub
  
  }
  
  @Override
  public void dispose() {
      // TODO Auto-generated method stub
  
  }
  </code></pre>
  
  <p>}</p>