Libgdx:屏幕大小调整和ClickListener(Libgdx)

3

我正在开发一个2D游戏,使用OrthographicCamera和Viewport将虚拟板调整为真实的显示尺寸。我将图像添加到舞台上,并使用ClickListener来检测点击事件。这个方法很好用,但是当我改变分辨率时,它不能正确地工作(无法检测正确的actor,我认为问题出在新的和原始的x和y上)。有没有什么方法可以解决这个问题?


请提供一些代码。 - R Hyde
3个回答

3

你需要将屏幕坐标转换为世界坐标。你的相机可以做到这一点。你可以使用 cam.project(...)cam.unproject(...) 两种方式。

或者如果你已经在使用 Actors,不需要自己初始化一个相机,而是使用一个 Stage。创建一个 Stage 并将 Actors 添加到其中,Stage 将为你进行坐标转换。


1

我曾经也遇到过这个问题,但最终找到了解决方法,可以使用SpriteBatch或libgdx中的Stage来绘制任何东西。使用正交相机即可实现。

首先选择一个最适合游戏的常数分辨率。这里我选择了1280*720(横屏)。

class ScreenTest implements Screen{
 
final float appWidth = 1280, screenWidth = Gdx.graphics.getWidth();
final float appHeight = 720, screenHeight = Gdx.graphics.getHeight();

OrthographicCamera camera;

SpriteBatch batch;
Stage stage;

Texture img1;
Image img2;

 public ScreenTest(){
    camera = new OrthographicCamera();
  camera.setToOrtho(false, appWidth, appHeight);
   
        batch = new SpriteBatch();
   batch.setProjectionMatrix(camera.combined);
     
        img1 = new Texture("your_image1.png");
   img2 = new Image(new Texture("your_image2.png"));
   img2.setPosition(0, 0); // drawing from (0,0)
  
        stage = new Stage(new StretchViewport(appWidth, appHeight, camera));
        stage.addActor(img2);
  }
    
    @Override
 public void render(float delta) {
 
  Gdx.gl.glClearColor(1, 0, 0, 1);
  Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

  batch.begin();
  batch.draw(img, 0, 0);
  batch.end();

  stage.act();
  stage.act(delta);
  stage.draw();
  
  // Also You can get touch input according to your Screen.
  
  if (Gdx.input.isTouched()) {
   System.out.println(" X " + Gdx.input.getX() * (appWidth / screenWidth));
   System.out.println(" Y " + Gdx.input.getY() * (appHeight / screenHeight));
    }
    
 }
  //
  : 
  :
  //
}

在任何分辨率下运行此代码,它都将自动适应该分辨率,不会出现任何干扰。

0

我认为Stage很容易使用。如果有错误,我建议您检查您的代码:

public Actor hit(float x, float y)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接