WASD를 사용하여지도를 이동하는 Libgdx와 함께 타일 기반 게임을하고 있습니다. 나는 scene2d 기능을 사용하여 화면을 그리며 렌더링중인 TiledMap이 잘 보입니다. 그러나 try.getCamera()를 호출하려고하면 translate (float x, float y, float z); 메서드를 사용하여 Gdx.Input.IsKeyPressed() 메서드로 뷰포트를 이동하면 뷰포트가 변환되지 않습니다. "KEY PRESSS"가 콘솔에 출력 되었기 때문에 메서드가 호출되고 있지만 카메라가 변환되지 않습니다. 뷰포트를 이동하는 다른 방법이 있습니까? Stage 클래스에는 카메라를 이동하는 다른 방법이 있습니까?Libgdx : Scene2d 카메라 번역
가 여기에 화면 내 소스입니다 : PlayScreen의 생성자에서
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 메소드에서 새로운 스테이지()를 가졌습니다. 왜냐하면 생성자에서로드 스크린이 화면을 초기화 할 것이고 로딩 스크린이 어떻게 든 스테이지 자체를 차지할 것이기 때문에 스테이지에 넣었을 것입니다. 그것을 보여줄 방법을 보여 주라. 그러나 나는 틀렸고 생성자에서 하나를 꺼내는 것을 잊어 버렸습니다. 그것은 내가 쇼 방법을 너무 세우지 말아야 할 좋은 점이다. 나는 보통 그 물건에 대해 생각한다. 그것이 내가 XP를 깨우지 않기 위해 얻은 것입니다. 대답에 다시 한번 감사드립니다. –