저는 타일 기반의 게임에서 스크롤 할 수 있어야하지만 세계의 경계 안에서만 작업해야합니다. 그래서 여러 예제/자습서가 제안하는 것처럼 pan() 메서드를 설정했지만 항상 제대로 작동하지는 않습니다. 때로는 마지막 제스처의 시작 지점으로 다시 점프하거나 매우 느리게 움직이는 경우도 있습니다. 또한 테두리가 작동하지 않습니다. 어쩌면 누군가 내가 만든 실수를 지적 할 수 있습니다.LibGDX 패닝이 때로 점프합니다
public void pan(float x, float y, float deltaX, float deltaY) {
moveCamera(x, y);
}
private void moveCamera(float x, float y) {
Vector3 new_position = getNewCameraPosition((int) x, (int)y);
if(!cameraOutOfLimit(new_position))
this.getViewport().getCamera().translate(new_position.sub(this.getViewport().getCamera().position));
lastTouchDown.set(x, y, 0);
}
private Vector3 getNewCameraPosition(int x, int y) {
Vector3 newPosition = lastTouchDown;
newPosition.sub(x, y, 0);
newPosition.y = -newPosition.y;
newPosition.add(this.getViewport().getCamera().position);
return newPosition;
}
private boolean cameraOutOfLimit(Vector3 position) {
int x_left_limit = (int) (Global.SCREEN_WIDTH/2);
int x_right_limit = (int) (Global.COLS_OF_TILES * Global.TILE_WIDTH - (Global.SCREEN_WIDTH/2));
int y_bottom_limit = (int) (Global.SCREEN_HEIGHT/2);
int y_top_limit = (int) (Global.ROWS_OF_TILES * Global.TILE_HEIGHT - Global.SCREEN_HEIGHT/2);
if(position.x < x_left_limit || position.x > x_right_limit)
return true;
else if(position.y < y_bottom_limit || position.y > y_top_limit)
return true;
else
return false;
}
은, 위의 코드에서 뭐가 잘못 됐는지 말해 어렵다. 그러나이 행'Vector3 newPosition = lastTouchDown;'은'lastTouchDown' 객체와 동일한'newPosition'의 참조 된 객체를 수정하기 때문에 문제가 발생할 것입니다. 그래서' lastTouchDown'을 실행하면 올바르지 않을 것입니다. 대신 Vector3 newPosition = new Vector3 (lastTouchDown);을 사용해야합니다. – Tenfour04