【发布时间】:2013-08-06 23:49:04
【问题描述】:
所以我有一个像这样的 sceneu2.ui 表:
+--------------------------------------+
|+---------+ +------------+ +---------+|
|| Table 1 | | ScrollPane | | Table 2 ||
|+---------+ +------------+ +---------+|
+--------------------------------------+
| My Actor |
+--------------------------------------+
scrollpane 内部是另一个table。外壳也是table。 Table 1、Table 2 和 table 在 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);
【问题讨论】:
-
看起来您正在重新发明一个 libgdx 按钮。你有什么理由不使用它?
-
因为它的文档很烂。一开始我以为它不支持鼠标悬停状态,但是当我实际尝试使用它时,我的编辑器自动完成告诉我它实际上有
over字段,我可以设置鼠标悬停可绘制。但这仍然不能回答为什么这不起作用。 -
你能解决这个问题吗??