我正試圖在libgdx遊戲中實現觸摸滾動。我有一個寬闊的形象,是一個房間的全景。我希望能夠滾動圖像,以便用戶可以看到房間周圍。我有它,這樣我可以滾動一定的距離,但是當一個新的touchDragged事件被註冊時,圖像會移回到原始位置。使用libgdx觸摸滾動
這是我如何實現它
public class AttackGame implements ApplicationListener {
AttackInputProcessor inputProcessor;
Texture backgroundTexture;
TextureRegion region;
OrthographicCamera cam;
SpriteBatch batch;
float width;
float height;
float posX;
float posY;
@Override
public void create() {
posX = 0;
posY = 0;
width = Gdx.graphics.getWidth();
height = Gdx.graphics.getHeight();
backgroundTexture = new Texture("data/pancellar.jpg");
region = new TextureRegion(backgroundTexture, 0, 0, width, height);
batch = new SpriteBatch();
}
@Override
public void resize(int width, int height) {
cam = new OrthographicCamera();
cam.setToOrtho(false, width, height);
cam.translate(width/2, height/2, 0);
inputProcessor = new AttackInputProcessor(width, height, cam);
Gdx.input.setInputProcessor(inputProcessor);
}
@Override
public void render() {
Gdx.gl.glClearColor(0,0,0,1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
batch.setProjectionMatrix(cam.combined);
batch.begin();
batch.draw(backgroundTexture, 0, 0, 2400, 460);
batch.end();
}
@Override
public void pause() {
// TODO Auto-generated method stub
}
@Override
public void resume() {
// TODO Auto-generated method stub
}
@Override
public void dispose() {
backgroundTexture.dispose();
}
}
而在InputProcessor
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
cam.position.set(screenX, posY/2, 0);
cam.update();
return false;
}
我得到這個遠從這個問題LibGdx How to Scroll using OrthographicCamera?幫助。但它並不能真正解決我的問題。
我認爲問題是touchDragged corodinates不是世界座標,但我試圖unprojecting相機沒有任何效果。
我一直在爲此奮鬥了幾個星期,我真的很感謝這方面的幫助。
在此先感謝。
這看起來可能是答案,你能否請你包含你的cameraOutOfLimit實現,因爲這是我遇到的問題。我已經嘗試了一個Scrollpane,並且這個方法可行,但是我可以在場景中添加一個新的Actor並讓它隨着背景一起滾動。 – jonnypotwash 2013-03-08 17:25:42
我添加了cameraOutOfLimit函數。我希望這會有所幫助。 – drinor 2013-03-08 23:15:25
這與P.T.提出的gestureListener結合使用效果很好。下面。 – jonnypotwash 2013-03-12 15:18:47