我正在与Libgdx一起使用WASD移动地图的基于图块的游戏。我使用scene2d功能来绘制屏幕,并且我正在渲染的TiledMap显示得很好。但是当我尝试并调用stage.getCamera()。translate(float x,float y,float z);方法用Gdx.Input.IsKeyPressed()方法移动视口时,视口不会转换。该方法正在调用中,因为“KEY PRESSS”正在输出到控制台上,但摄像机未翻译。有另一种移动视口的方法吗? Stage课程是否有其他方法来移动相机?Libgdx:翻译Scene2d摄像机
这里是我的屏幕来源:
package com.BurntToast.SolidDiamond;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.maps.tiled.TiledMap;
import com.badlogic.gdx.maps.tiled.TmxMapLoader;
import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Pool;
import com.badlogic.gdx.utils.viewport.FitViewport;
public class PlayScreen implements Screen {
private MainFrame mainFrame;
private OrthographicCamera camera;
private Vector3 touchCoord;
private TiledMap currentMap;
private OrthogonalTiledMapRenderer otmr;
private ConveyorActor convActor;
private Stage mapStage;
public PlayScreen(MainFrame passedGame){
mainFrame = passedGame;
convActor = new ConveyorActor(mainFrame.conveyorFrames, 1, 0, 0);
mapStage = new Stage();
mapStage.addActor(convActor);
currentMap = new TmxMapLoader().load("maps/MenuMap2.tmx");
otmr = new OrthogonalTiledMapRenderer(currentMap);
otmr.setView((OrthographicCamera)mapStage.getCamera());
}
@Override
public void render(float delta) {
// TODO Auto-generated method stub
//ERIC (erase, redraw, input, calculate)
//ERASE
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
//camera.update();
//REDRAW
otmr.render();
mapStage.draw();
//INPUT/CALCULATE
mapStage.act();
if(Gdx.input.isTouched()){
}//end if touched
//MAP TRANSLATION INPUT HERE:
if(Gdx.input.isKeyPressed(Keys.W)){
//heres the line of code but it won't translate.
mapStage.getCamera().translate(0, 10, 0);
mapStage.getCamera().update();
System.out.println("KEY PRESSS");
}
if(Gdx.input.isKeyPressed(Keys.A)){
mapStage.getCamera().translate(-10, 0, 0);
mapStage.getCamera().update();
}
if(Gdx.input.isKeyPressed(Keys.S)){
mapStage.getCamera().translate(0, -10, 0);
mapStage.getCamera().update();
}
if(Gdx.input.isKeyPressed(Keys.D)){
mapStage.getCamera().translate(10, 0, 0);
mapStage.getCamera().update();
}
}
@Override
public void resize(int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void show() {
// TODO Auto-generated method stub
mapStage = new Stage(new FitViewport(mainFrame.SCREEN_WIDTH, mainFrame.SCREEN_HEIGHT));
}
@Override
public void hide() {
// TODO Auto-generated method stub
}
@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
currentMap.dispose();
}
我在show方法中使用了新的Stage(),因为当我在构造函数中使用它时,加载屏幕会初始化屏幕,并且我认为加载屏幕以某种方式将舞台置于其自身上,所以我将它放入显示方法,所以它不会。但事实证明我错了,然后忘记拿出构造函数中的那个。这是关于我不应该如何放置演出方法的一个好点。我通常会考虑那些东西。这就是我没有休息一下XP的原因。再次感谢您的答复。 – 2014-12-19 19:30:13