2013-06-04 4 views
5

내가 libgdx 포럼에서이 요청하지만, 응답을하지 않았다 예상대로 회전 배우 번역되지. 내가 뭘 하려는지 플레이어가 placeTile 명령을 제출하기 전에 타일을 클릭하고 드래그하여 화면 주위로 이동하고 여러 번 회전 할 수 있도록하는 것입니다. DragAndDrop에 대한 이해에서 유스 케이스를 염두에두고 설계된 것 같지 않으므로 대신 dragListener 리스너를 각 게임 조각 (아래 코드)에 연결한다고 생각했습니다. 드래그를 시작하기 전에 최소 거리를 설정하는 방법을 알아낼 수 없다는 점을 제외하고는 드래그에 효과적입니다.하지만 내 주요 질문은 아닙니다. (통찰력은 인정 될지라도).Scene2d 나는 너희들이 좀 도와줬으면 그래서

어쨌든 30도 회전에서 드래그는 거의 정상적인 동작을합니다. 60도에서 마우스의 아주 작은 움직임은 매우 빠른 속도로 움직이는 배우를 보냅니다. 또 다른 30도, 타일 액터는 1-2 프레임의 화면을 벗어나 넓은 호를 움직입니다. 액터가 시계 방향으로 회전하면 움직임은 시계 방향입니다. 반 시계 방향과 동일한 패턴.

배우의 번역이 고려되고있는 것처럼 보입니다. 내 질문에, 미래의 번역에 영향을 미치는 회전없이 액터/그룹을 회전하는 것이 가능한가? 또는 터치/마우스 입력에 따라 액터를 드래그하는 더 좋은 방법이 있습니까? 나는 아래의 몇 가지 코드를 포함 : 내가 기본 뭔가를 속이고있어 상상,하지만 난 알아낼 수있는 :

multiplexer.addProcessor(new InputAdapter() { 
    @Override 
    public boolean scrolled(int amt) { 
     if (chosenTileActor == null) 
      return false; 
     else 
      chosenTileActor.rotate(amt * 30); 
     return true; 

    } 
    }); 
:

// during initial stage creation 
tileActor.setOrigin(tileActor.getWidth()/2, tileActor.getHeight()/2); 
tileActor.addListener(new DragListener() { 
     public void dragStart(InputEvent event, float x, float y, 
       int pointer) { 
      chosenTileActor = event.getTarget(); 

     } 

     public void drag(InputEvent event, float x, float y, int pointer) {    
      Actor target = event.getTarget();    
      target.translate(x, y); 
     } 

    }); 

그리고 스크롤 마우스 휠을 통해 회전 처리하는 리스너

포인터가 있습니까? DragListener를 사용하여 올바른 방향으로 가고 있습니까?

읽어 주셔서 감사합니다. , 당신의 드래그 이벤트의 스테이지 좌표에 직접 배우의 위치를 ​​설정하는 대신 번역의

답변

7

: 그래서 배우 즉시에

tileActor.addListener(new DragListener() { 
    private float offsetX, offsetY; 

    @Override 
    public void dragStart(InputEvent event, float x, float y, int pointer) { 
    Actor target = event.getTarget(); 
    this.offsetX = event.getStageX() - target.getX(); 
    this.offsetY = event.getStageY() - target.getY(); 
    } 

    @Override 
    public void drag(InputEvent event, float x, float y, int pointer) { 
    event.getTarget().setPosition(event.getStageX() - offsetX, event.getStageY() - offsetY); 
    } 
}); 

내가 dragStart의 오프셋을 계산하고있어 점프하지 않는 곳 I 마우스를 드래그하기 시작했을 때 클릭했다. 이것을 테스트하고 어떤 회전에서도 작동합니다.

+1

완벽하게 작동했습니다. 감사합니다. –

+0

'setTapSquareSize' 메소드를보십시오. 원하는 경우 0F로 설정하십시오. – Alexmelyon

관련 문제