2013-08-06 56 views
4

所以我有一个sceneu2.ui表是这样的:Libgdx scene2d演员似乎淡出随机

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

scrollpane里面是另一个table。该外壳也是tableTable 1,Table 2table内部的scrollpane具有相同的行数。

My Actor是简单的图像按钮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

因为它的文档很烂。我认为它一开始并不支持mouseover状态,但是当我真正尝试使用它时,我的编辑器自动完成功能告诉我它实际上有'over'字段可以设置mouseover drawable。但是这仍然不能回答为什么这不起作用。 – innocenat

+0

你能解决这个问题吗? – Tiarsoft

回答

0

默认为滚动窗格 “空白” 皮肤/行为确实有些褪色进进出出。我不清楚为什么,但它可能导致屏幕上的其他东西也会消失。我在背景图像上遇到了同样的问题。我怀疑如果你为ScrollPane定义自己的皮肤,你会看到你的按钮出现。

3

添加到Draw方法中男主角的setColor(1,1,1,1)

@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

我意识到这个问题,今年2岁,但我也有这个问题,所以想我会后我的解。对我来说,这仅仅是一个设置滚动条淡化为false的情况,使用

ScrollPane scroll = new ScrollPane(); 
scroll.setFadeScrollBars(false);