【发布时间】:2016-02-29 15:18:59
【问题描述】:
我设法从 .*ttf 创建了一个文本,现在我有了一个 BitmapFont 对象。我想把它用作演员。在 Actor 的方法 draw() 中,我使用了:
FontRed.draw(batch, "Some text!", getX(), getY());
显示了文本,但侦听器不起作用。当我试图从 BitmapFont 中获取一个区域时:
batch.draw(FontRed.getRegion(), getX(), getY(), getWidth(), getHeight());
我在屏幕上看到了很多奇怪的符号而不是我的文字,但我的听众工作正常。
我认为这与这个事实密切相关,即 spritebatch 是在 BitmapFont 的 draw() 方法中发送的。这是我的完整代码:
public class Text extends Actor {
private BitmapFont FontRed;
private FreeTypeFontGenerator generator;
FreeTypeFontParameter parameter;
String FONT_CHARS = "";
public Text(GameStateManager gsm){
generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/myfont.ttf"));
for( int i = 32; i < 127; i++ ) FONT_CHARS += (char)i;
for( int i = 1024; i < 1104; i++ ) FONT_CHARS += (char)i;
parameter = new FreeTypeFontParameter();
parameter.characters = FONT_CHARS;
parameter.size = 82;
parameter.color= Color.RED;
FontRed = generator.generateFont(parameter);
generator.dispose();
setPosition(30, 300);
setSize(182, 182);
this.addListener(new Listener(gsm));
}
@Override
public void draw(Batch batch, float parentAlpha) {
FontRed.draw(batch, "Some text!", getX(), getY());
// batch.draw(FontRed.getRegion(), getX(), getY(), getWidth(), getHeight());
}
@Override
public void act(float delta) {
}
class Listener extends InputListener {
GameStateManager gsm;
Listener(GameStateManager gsm){
this.gsm = gsm;
}
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
event.getListenerActor().setColor(Color.GREEN);
System.out.println("it works");
return true;
}
@Override
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
gsm.push(new PlayState(gsm));
}
}
}
所以请解释一下为什么当在 BitmapFont 的方法 draw() 中发送 spritebatch 时 Actor 中的列表器不起作用,以及如何从 BitmapFont 制作纹理以便在 batch.draw() 中使用它?
【问题讨论】:
-
演员的绘制方式完全独立于任何听众,所以一定有其他事情发生。您如何确定侦听器是否在工作?现在你已经设置了actor的颜色,但是你在绘制它时没有使用actor的颜色,所以它是不可见的。您是说“它有效”日志仅在您绘制字体区域时发生?他们没有任何关系。
-
@Tenfour04,设置演员的颜色没关系,我忘了删除它。我的意思是当我画
FontRed.draw(batch, "Some text!", getX(), getY());时System.out.println("it works");不起作用但是当我画batch.draw(FontRed.getRegion(), getX(), getY(), getWidth(), getHeight());时,我看到的是愚蠢的符号而不是我的文字,但听众可以工作。你说他们没有关系。但是该怎么办?请帮帮我。 -
再次检查。如果您查看 Stage 和 Actor 的源代码,您会发现您所描述的内容是不可能的。您必须进行其他更改。
标签: libgdx