2015-01-29 2 views
0

저는 Libgdx에서 새로운데, 제 Libgdx 학습을 계속할 수 없도록 차단하는 한 가지 방법은 제가 GestureListener를 사용하는 방법을 모른다는 것입니다. 이 링크 LibGdx: Utilizing a Gesture Listener에서 본다면 동일한 의심의 사용자가있는 것 같습니다.하지만 도움이되지는 않습니다. 그래서 제 질문은 : 제 자신의 GestureListener 클래스를 사용하여 플레이어의 움직임을 처리하는 방법은 무엇입니까? 팬 기능을 사용하여 점프를하고 싶습니다. 그러나 플레이어 오브젝트를 메소드 안에 넣는 법을 모르겠습니다. 당신이 내 동작 감지기 클래스를 참조하십시오 경우, 내 시작 화면에서 지금Libgdx 제스처 감지기를 사용하는 방법

Gdx.input.setInputProcessor(new GestureDetector(new GestureHandler(this))); 

: 메인 클래스에서 나는 fallowing 명령을 전달 :

public class GestureHandler implements GestureListener { 
// Main Game class 
private ClimbUp mainGame; 

public GestureHandler(ClimbUp game) { 
    this.mainGame = game; 
} 

@Override 
public boolean touchDown(float x, float y, int pointer, int button) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean tap(float x, float y, int count, int button) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean longPress(float x, float y) { 
    // TODO Auto-generated method stub 
    return false; 
} 

... 

그때 나는 그들이 무엇을해야 하는지를 사용자가 말한 다음 나는 어떻게 사용하는지 모른다. 내 GestureHandler 객체를 모든 프로젝트에서 사용하려면 어떻게해야합니까? 나는 대답에 매우 감사 할거야!

답변

0

따라서 GestureListener "services"가 필요한 클래스가 있습니다. 제스처 이벤트가 발생하고 제스처 속성 정보를 원할 때 알림을 받고 싶습니다.

그런 다음 클래스에서 GestureListener 인터페이스를 구현하도록 만듭니다.

그런 다음 IDE (Eclipse 또는 Android Studio 또는 기타)가 모든 GestureListener 메소드를 구현하지 않았다고 불평하지만, 사용자를 위해이를 수행 할 수도 있습니다. 코드에서 오류 (예 : Eclipse)를 찾으면 IDE에서 누락 된 메서드를 만들 수 있습니다.

나는 당신이 그 단계에 있다고 말하고 싶습니다. 그러나 지금 당신의 방법은 유용한 것을해야합니다. 마찬가지로, 플레이어가 화면을 두 드렸을 때 무언가를하고 싶다면 그 방법 안에 코드를 추가하십시오. 거기에 뭔가를하십시오. 내부 GestureListener 메서드에는 x & y 좌표, 단추 (왼쪽, 가운데, 오른쪽)와 같은 메서드 매개 변수와 같은 유용한 정보가 있습니다.

그래서 setInputProcessor를 G.L. 인터페이스를 구현 한 클래스로 만든 객체로 호출하면 libGDX는 어떤 이벤트가 발생할 때 메서드를 호출하는 것을 알게됩니다.

IDE에서 생성 된 모든 메소드에는 "todo"표시가 있습니다. 코드 대신 코드를 넣어야합니다. 그 사건을 처리 할 코드, 우주선을 움직이거나 총알을 발사하십시오. 모든 이벤트에 대해 무언가를 할 필요는 없지만 관심있는 사람들에게만 무언가를 할 수 있습니다. 다른 빈 칸은 남겨 둘 수 있지만 클래스에는 반드시 있어야합니다. 여기

은 몇 가지 예입니다

// importing interface 
import com.badlogic.gdx.input.GestureDetector.GestureListener; 

// defining my class that implements that interface 
public class TouchController implements GestureListener{ 

// constructor - just storing objects passed to it. 
    public TouchController(Playground pg, Army army, Hud hud){ 
     super(); 
     this.pg = pg; 
     this.army = army; 
     this.hud = hud; 
     initialZoom = pg.zoom; 
    } 

// Adding some action to touchDown method - I'm just calling my hud object's method and passing coords I get 
    @Override 
    public boolean touchDown(float x, float y, int pointer, int button) { 
     hud.pressedAt(x, pg.camera.viewportHeight-y); // opposite Y axis 
     // TODO Auto-generated method stub 
     return false; 
    } 

// Similar thing. I unproject coords I get. 
    @Override 
    public boolean tap(float x, float y, int count, int button) { 
     if (!hud.buttonPressed){ 
      Vector3 touchPos = new Vector3(); 
      touchPos.set(x, y, 0); 
      pg.camera.unproject(touchPos); 
      army.add(touchPos.x, touchPos.y, SoldierSide.RED); 
     }else hud.released(); 
     return false; 
    } 

// Again similar stuff, but this pan methods is getting also delta value (difference from last reading x and y values) which can be useful 
    @Override 
    public boolean pan(float x, float y, float deltaX, float deltaY) { 
     if (hud.aimDrag) hud.aimDragged((int)deltaX, (int)deltaY); 
     else if (hud.sliderDrag) hud.sliderDragged((int)deltaX, (int)deltaY); 
     else if (!hud.buttonPressed) pg.panned((int)deltaX, (int)deltaY); 
     return false; 
    } 

... 
+0

나는 그것을 아주 잘하지 않았다. 그래서 메서드 내에서 Player 클래스를 만들어야합니까? 보여주기위한 코드가 있습니까? – Jazzguy

+0

아니요, 당신이 작성한 비어있는 메소드 IDE 내에서 실행되어야하는 코드를 넣으면됩니다. "GestureListener"인터페이스를 구현 한 "GestureHandler"클래스가 있고 그 클래스에 몇 가지 추가 메서드가 있습니다. 일부 메소드가 호출 될 때 해당 메소드가 호출 (실행)됩니다. 따라서 이벤트가 발생하면 무언가를 할 수있는 메소드 내에 코드를 넣으면됩니다. – MilanG

+0

코드 예제 (링크 등)를 보여 주시겠습니까? 나뿐만 아니라 동일한 의심을 가진 다른 사용자에게도 매우 유용 할 것입니다. – Jazzguy

관련 문제