【问题标题】:Libgdx scene2d actor appear and fade out randomlyLibgdx scene2d 演员随机出现和淡出
【发布时间】:2013-08-06 23:49:04
【问题描述】:

所以我有一个像这样的 sceneu2.ui 表:

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

scrollpane 内部是另一个table。外壳也是tableTable 1Table 2tablescrollpane 中的行数相同。

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);

【问题讨论】:

  • 看起来您正在重新发明一个 libgdx 按钮。你有什么理由不使用它?
  • 因为它的文档很烂。一开始我以为它不支持鼠标悬停状态,但是当我实际尝试使用它时,我的编辑器自动完成告诉我它实际上有over 字段,我可以设置鼠标悬停可绘制。但这仍然不能回答为什么这不起作用。
  • 你能解决这个问题吗??

标签: java libgdx scene2d


【解决方案1】:

我意识到这个问题已有 2 年历史了,但我也遇到了这个问题,所以我想我会发布我的解决方案。对我来说,这只是将滚动条淡入淡出设置为 false 的情况,使用

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

【讨论】:

    【解决方案2】:

    在actor setColor(1,1,1,1)中添加draw方法

    @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());
        }
    

    【讨论】:

    • 对不起,我无法测试您的答案是对还是错,因为我已经更改为其他解决方法(我不记得是什么了)。这个项目是几个月前完成的。不过,还是谢谢你的回答。
    • 是的,别担心,我有同样的问题,我解决了我发布的方式 =)
    【解决方案3】:

    ScrollPane 的默认“空白”皮肤/行为会进行一些淡入和淡出。我不清楚为什么,但它也会导致屏幕上的其他东西褪色。我对背景图像也有同样的问题。我怀疑如果您为 ScrollPane 定义自己的皮肤,您会看到您的按钮出现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 2013-10-04
      相关资源
      最近更新 更多