2013-08-06 5 views
4

그래서 나는이 같은 sceneu2.ui 테이블이 나타나고 페이드 아웃 다음 scrollpane 내부Libgdx scene2d 배우 무작위로

+--------------------------------------+ 
|+---------+ +------------+ +---------+| 
|| Table 1 | | ScrollPane | | Table 2 || 
|+---------+ +------------+ +---------+| 
+--------------------------------------+ 
|        My Actor | 
+--------------------------------------+ 

다른 table입니다. 인클로저는 table입니다. Table 1, Table 2table 안에 scrollpane의 행 수가 같습니다.

My Actor은 마우스 오버에도 대응하고있는 심플 버튼 애견입니다.

처음에는 My Actor이 나타나지 않지만 (경계선은 테이블 디버그 라인으로 검사 됨), scrollpane (마우스 사용)에서 스크롤 할 때 2 초 동안 나타난 다음 시작됩니다. 사라지다. (예상되는 결과가 항상 나타나야 함)

내가 뭘 잘못하고 있니?


My Actor 클래스 :

public class GameButton extends Actor { 
    public static abstract class Listener { 
     public abstract void onClick(); 
    } 

    final Texture[] current; 
    final Listener listener; 
    boolean disabled; 
    int state = 0; 

    public GameButton(Texture[] current, final Listener listener) { 
     this.current = current; 
     setWidth(current[0].getWidth()); 
     setHeight(current[0].getHeight()); 

     this.listener = listener; 
     disabled = false; 

     this.addListener(new InputListener() { 
      boolean just_up = false; 

      @Override 
      public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { 
       state = 2; 
       return true; 
      } 

      @Override 
      public void touchUp (InputEvent event, float x, float y, int pointer, int button) { 
       state = 0; 
       if (hit(x, y, false) != null) { 
        just_up = true; 
        state = 1; 
        if (listener != null && !disabled) 
         listener.onClick(); 
       } 
      } 

      @Override 
      public void enter (InputEvent event, float x, float y, int pointer, Actor fromActor) { 
       if (state == 0) 
        state = 1; 
      } 

      @Override 
      public void exit (InputEvent event, float x, float y, int pointer, Actor toActor) { 
       if (!just_up) 
        state = 0; 
       just_up = false; 
      } 
     }); 
    } 

    public void setDisabled(boolean disabled) { 
     this.disabled = disabled; 
    } 

    @Override 
    public void draw(SpriteBatch batch, float _) { 
     super.draw(batch, _); 
     batch.draw(current[disabled ? 0 : state], getX(), getY(), getWidth(), getHeight()); 
    } 
} 

테이블에이를 추가하는 데 사용되는 코드 :

btnBack = new GameButton(Assets.btnBack, 0, 0, new GameButton.Listener() { 
     @Override 
     public void onClick() { 
      /* removed */ 
     } 
    }); 
    add(btnBack).colspan(3).right().bottom().height(128); 
+0

libgdx 버튼을 다시 만들고있는 것처럼 보입니다. 당신이 그것을 사용하지 않는 이유는 무엇입니까? – Jyro117

+2

문서가 끔찍하기 때문입니다. 처음에는 마우스 오버 상태를 지원하지 않는다고 생각했지만 실제로 사용하려고 할 때 편집자 자동 완성 기능을 사용하면 실제로 마우스 오버 드로어 블을 설정할 수있는 '오버'필드가 있음을 알 수있었습니다. 그러나 이것은 아직도 왜 작동하지 않는지에 대한 대답을하지 못합니다. – innocenat

+0

이 문제를 해결할 수 있었습니까 ?? – Tiarsoft

답변

0

기본값은 ScrollPane에 대한 "빈"피부/동작은 약간 퇴색하지 안팎. 이유는 분명하지 않지만 화면의 다른 것들 역시 희미해질 수 있습니다. 배경 이미지가있는 것과 같은 문제가있었습니다. ScrollPane에 자신 만의 스킨을 정의하면 버튼이 나타납니다.

3

이 문제는 내가 게시 할 것이라고 생각 액터 setColor를 (1,1,1,1) 나는이 질문은 2 세입니다 실현

@Override 
    public void draw(SpriteBatch batch, float _) { 
     batch.setColor(1,1,1,1); 
     super.draw(batch, _); 
     batch.draw(current[disabled ? 0 : state], getX(), getY(), getWidth(), getHeight()); 
    } 
+0

죄송합니다. 이미 다른 해결 방법으로 변경 되었기 때문에 답변이 맞는지 틀린 지 여부는 테스트 할 수 없습니다 (그리고 기억하지 못합니다). 그리고 그 프로젝트는 몇 달 전에 끝났습니다. 그래도 답변 해 주셔서 감사합니다. – innocenat

+0

그래도 걱정하지 마세요. 같은 문제가있어서 제가 게시 한 방법을 해결했습니다 =) – Tiarsoft

5

에서 추첨 방식으로 추가 할 수 있지만 나 또한 가지고 내 해결책. 저에게 스크롤 바 페이드를 false로 설정하는 경우 일뿐입니다.

ScrollPane scroll = new ScrollPane(); 
scroll.setFadeScrollBars(false); 
관련 문제