2014-03-30 70 views
0

我目前正在爲我即將開發的項目製作我自己的關卡創建者(瓷磚地圖)。這一切都很順利,除了當我添加一個放大和縮小選項時遇到問題。我有一個正在處理所有輸入和渲染的類,就像我剛剛開始的那樣。Libgdx上的光標輸入「不正確」返回

LevelEditorController extends InputAdapter implements ApplicationListener 

如您所見,該類擴展了InputAdapter並實現了ApplicationListener。

cameraHelper = new CameraHelper(); 
camera = new OrthographicCamera(Constants.VIEWPORT_WIDTH, 
     Constants.VIEWPORT_HEIGHT); 
camera.position.set(0f, Constants.VIEWPORT_HEIGHT/2, 1f); 
camera.update(); 
cameraHelper.setPosition(camera.position.x, camera.position.y, 
       camera.position.z); 

相機是OrthographicCamera。 cameraHelper是我製作的幫手類。我在這裏設置相機的位置。 cameraHelper.setPosition(...)只是在我的CameraHelper類中設置一個Vertice3。

batch.setProjectionMatrix(camera.combined); 
shapeRenderer.setProjectionMatrix(camera.combined); 

上面,在重寫的render方法中,我設置了我的批處理和shapeRenderer的項目矩陣。

我相信這一切都是有效的,因爲一切正常顯示,只有光標位置關閉。

@Override 
     public boolean mouseMoved(int x, int y) { 
      for (int i = 0; i < boundingBoxes.size; i++) { 
       if (boundingBoxes.get(i).toRectangle() 
         .contains(x, Gdx.graphics.getHeight() - y) 
         && !boundingBoxes.get(i).isActive()) { 
        boundingBoxes.get(i).setRenderFull(true); 
       } else { 
        boundingBoxes.get(i).setRenderFull(false); 
       } 
      } 
      shapeRenderer.begin(ShapeType.Filled); 
      shapeRenderer.setColor(0.53f, 0.62f, 0.32f, 1f); 
      shapeRenderer.circle(x, Gdx.graphics.getHeight() - y, 20); 
      shapeRenderer.end(); 
      return false; 
     } 

這是我的問題所在。在上面的方法中,我只需檢查光標位置是否與其中一個網格正方形相交。如果是這樣,我使網格正方形爲「renderFull」,呈現完整(填充)不同顏色的矩形。同樣在這個方法中,我在當前光標指針所在的地方繪製一個圓圈。這就是我的問題所在。當我運行我的程序時,圓圈不在我的光標所在的位置。我花了大約一個小時的時間進行調試,並試圖根據縮放比例提出一些算法來正確對齊,但無濟於事。有沒有辦法讓我的光標的正確位置,無論我的縮放嗎?此外,這可能是我遇到的問題,我的「世界」大小(網格)大約爲10000像素長。光標位置是否也隨之移動,還是會保持在實際程序的/ Jframe的大小範圍內?如果是這樣的話,我可以通過任何方式解決這個問題(我想這應該和將相機的位置添加到光標位置一樣簡單,但只是爲了防止出現這種情況):D) 這裏有一些圖片,以便您可以更好地瞭解問題是什麼。 Zoom at 1

Zoom at... further than 1 Zoom at 10

任何幫助表示讚賞。謝謝! :)

+1

['CabPanel'](http://stackoverflow.com/a/14887457/230513)可能會提供一些見解。 – trashgod

回答

4

您必須將輸入點取消投影到相機使用的座標系中。

touchMoved(int x, int y)將只包含屏幕上的像素位置。通過使用camera.unproject(Vector3 window),您將在您的世界/場景座標中獲得這些觸摸座標。

這樣,觸摸位置應該匹配。希望它有助於... :)

+0

謝謝!我應該知道的。我只是在3D空間中做了同樣的事情。不幸的是,我的筆記本電腦受到水損壞。看起來硬盤被炸了。 – user2082169

+0

然後我肯定會建議在Github,Bitbucket或者你自己的服務器上支持這些項目以備將來的項目......;)很高興我能幫到你...... – evident

+0

是的,我一定會從現在開始保留備份。我失去了所有的項目,但幸運的是唯一重要的一個已經被壓縮和上傳。但是,我會錯過我的所有筆記和個人文件。我要藉此機會從一個新的石板開始。:) – user2082169