I 끌기 리스너 설정 한 액터있다 : I 화소 비율 m을 사용하는 경우하기LibGDX 드래그 수신기
W = Gdx.graphics.getWidth();
H = Gdx.graphics.getHeight();
camera = new OrthographicCamera(W/RATE, H/RATE);
stage = new Stage(new ScreenViewport(camera));
stage.addActor(ballActor);
Gdx.input.setInputProcessor(stage);
: 액터는 단계에 첨가
ballActor.addListener(new DragListener() {
public void drag(InputEvent event, float x, float y, int pointer) {
ballActor.moveBy(x - ballActor.getWidth()/2, y - ballActor.getHeight()/2);
}
});
을 1 : 1 끌기는 잘 작동하지만 1 : 160처럼 다른 비율을 사용하면 끌기 이벤트가 실행되지 않습니다. 내가 카메라를 업데이트 크기 조정 방법
는 :
camera.viewportHeight = H/RATE;
camera.viewportWidth = W/RATE;
camera.position.set(camera.viewportWidth/2, camera.viewportHeight/2, 0);
camera.update();
은 내가 무대를 사용하는 경우 I 화면이 카메라 좌표 좌표에서 번역 해달라고 읽어 보시기 바랍니다. 액터는 위치, 너비, 높이 및 경계를 설정했습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
UPDATE :
public class Pendulum extends ApplicationAdapter {
private Stage stage;
public static final float RATE = 160f; //with 1f..20f drag works
float W;
float H;
@Override
public void create() {
W = Gdx.graphics.getWidth()/RATE;
H = Gdx.graphics.getHeight()/RATE;
Texture ballTexture = new Texture(Gdx.files.internal("ball.png"), true);
ballTexture.setFilter(Texture.TextureFilter.MipMapLinearNearest, Texture.TextureFilter.Linear);
TextureRegion ballRegion = new TextureRegion(ballTexture);
final Image image = new Image(ballRegion);
image.setSize(image.getWidth()/RATE, image.getHeight()/RATE);
image.setPosition(0f, 0f);
image.addListener(new DragListener() {
public void drag(InputEvent event, float x, float y, int pointer) {
Gdx.app.log("LOG", "DRAG IMAGE");
image.moveBy(x - image.getWidth()/2, y - image.getHeight()/2);
}
});
image.debug();
image.setBounds(image.getX(), image.getY(), image.getWidth(), image.getHeight());
stage = new Stage(new FitViewport(W, H));
stage.addActor(image);
Gdx.input.setInputProcessor(stage);
}
@Override
public void resize(int width, int height) {
stage.getViewport().update(width, height, true);
}
@Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
float delta = Math.min(Gdx.graphics.getDeltaTime(), 1/30f);
stage.act(delta);
stage.draw();
}
@Override
public void dispose() {
stage.dispose();
}
}
나는 이미지의 배우가 Box2D의 몸이 붙어 있기 때문에 100F보다 속도가 더 있어야합니다 : 여기
는 코드입니다. 이유는 here을 참조하십시오.
지금 I은'스테이지 = 새로운 단계 (새 FitViewport (W/RATE, H/RATE))를 가지고, '와 resize''의'stage.getViewport() 업데이트 ((INT) (폭./RATE), (int) (높이/RATE), 참);'. 'RATE = 160f;'는 상수이며 box2d phisyc가 제대로 작동하도록 전 세계를 확장하는 데 사용합니다. 세계를 다운 스케일하지 않으면 (RATE = 1f') 오브젝트가 매우 천천히 움직입니다. 만약 내가 다운 드래그가 발사되지 않으면. – Jorj
W 및 H 상수 또는 현재 화면의 크기가 있습니까? 뷰포트 생성자에 상수 만 전달해야합니다. 그렇지 않으면 현재 개발중인 디스플레이의 크기에서만 작동하도록 게임을 디자인하고 있습니다. 예를 들어, 화면에 8m 크기의 Box2d를 수직으로 표시하기를 원할 경우,'new ExtendViewport (8, 8)'을 사용할 수 있습니다. 그런 다음'resize'에서'viewport.update (width, height)'를 실제 화면 크기로 호출하십시오. 이제 귀하의 게임은 모든 장치에서 8 박스 2 미터 높이가됩니다. – Tenfour04
화면 크기 :'W = Gdx.graphics.getWidth()'. [Here] (https://gist.github.com/costinpapuc/5f13cd22c8274151b7cf8bd74af4e631)는 전체 코드입니다. 당신이 볼 수 있다면 나는 당신이 품질의 답변을 원한다면 – Jorj