2012-06-27 171 views
2

我開發了一個2D遊戲,並使用OrthographicCamera和Viewport將virtaul板重新調整爲實際顯示大小。我添加圖像到舞臺並使用ClickListener檢測點擊。它工作正常,但是當我改變分辨率時,它的工作是不合理的(不能檢測到正確的演員,我認爲新的和原始的x和y的問題)。有沒有什麼辦法解決這一問題?Libgdx:調整屏幕大小和ClickListener(libgdx)

+0

請您提供一些代碼。 –

回答

3

您需要將屏幕座標轉換爲世界座標。 你的相機可以做到這一點。你可以用兩種方法,cam.project(...)cam.unproject(...)

或者如果你已經在使用Actors,不要自己初始化攝像機,而是使用Stage。創建一個舞臺並添加演員。舞臺將爲你做協調翻譯。

0

我只是覺得Stage很容易使用。 如果有一些錯誤的,我認爲你應該檢查你的代碼:

public Actor hit(float x, float y) 
1

一旦我也遇到這個問題,但在最後,我得到了有效的解決方案,繪製使用SpriteBatch在libgdx任何東西,或舞臺上。使用正交相機我們可以做到這一點。

首先選擇一個最適合遊戲的恆定分辨率。在這裏,我採取了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(){ 
 
    \t \t camera = new OrthographicCamera(); 
 
\t \t camera.setToOrtho(false, appWidth, appHeight); 
 
    \t \t 
 
     batch = new SpriteBatch(); 
 
    \t \t batch.setProjectionMatrix(camera.combined); 
 
    \t \t \t 
 
     img1 = new Texture("your_image1.png"); 
 
    \t \t img2 = new Image(new Texture("your_image2.png")); 
 
    \t \t img2.setPosition(0, 0); // drawing from (0,0) 
 
    \t 
 
     stage = new Stage(new StretchViewport(appWidth, appHeight, camera)); 
 
     stage.addActor(img2); 
 
    } 
 
    
 
    @Override 
 
\t public void render(float delta) { 
 
\t 
 
\t \t Gdx.gl.glClearColor(1, 0, 0, 1); 
 
\t \t Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
 

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

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

運行這段代碼在任何類型的分辨率將要在沒有任何干擾這一決議進行調整。