【发布时间】:2017-11-11 02:16:16
【问题描述】:
所以这很奇怪...... 我有一个抽象的 BaseScreen。此屏幕在 show() 上初始化 SpriteBatch。 init() 调用 BaseScreen 的抽象方法之一。 这个绘制问题来自使用“gameView”视口,它是一个 ExtendViewport
SpriteBatch batch;
@Override
public void show(){
batch = new SpriteBatch();
gameView = new ExtendViewport(SV.V_WIDTH, SV.V_HEIGHT);
hudView = new ScreenViewport();
init();
}
这是我在渲染函数中所做的:
@Override
public void render(float delta){
/*
Just in case render is being called more than usual 60 times,
I want to call update only 60 times per second. (SV.STEP = 1/60f)
*/
accum += delta;
while(accum >= SV.STEP){
accum -= SV.STEP;
update();
}
/* Clear Screen */
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);
/* DRAW WORLD */
batch.setProjectionMatrix(gameView.getCamera().combined);
gameView.apply(true);
batch.begin();
draw(batch, SV.BatchType.World);
batch.end();
/* DRAW UI
batch.setProjectionMatrix(hudView.getCamera().combined);
hudView.apply(true);
batch.begin();
draw(batch, SV.BatchType.UI);
batch.end();*/
}
我有两个视口,一个用于游戏世界,一个用于 hud。我用它们来设置批次的投影矩阵。
draw(batch, SV.BatchType.World) 命令最终将代码带到这里:
private void drawBody(Batch batch){
Vector2 position = body.getPosition();
//Gdx.app.log(TAG, heart.getWidth() + ", " + heart.getHeight());
batch.draw(heart, position.x-100,position.y-50, h_width*2, h_height*2);
font.draw(batch, "THIS IS A WOOOOOOOOO!", 100, 100);
}
注意它是如何不绘制文本的。
这是仅使用 batch.draw 的结果 - (font.draw 被省略)
现在问题变成了“最后调用了什么类型的 .draw”,它忽略了所有这些 - 例如:
private void drawBody(Batch batch){
Vector2 position = body.getPosition();
//Gdx.app.log(TAG, heart.getWidth() + ", " + heart.getHeight());
batch.draw(heart, position.x-100,position.y-50, h_width*2, h_height*2);
font.draw(batch, "THIS IS A WOOOOOOOOO!", 100, 100);
font.draw(batch, "THIS IS A TEST!", position.x, position.y + 100);
font.draw(batch, "THIS IS A WOOOOOOOOO!", position.x, position.y - 100);
}
会画
还有这个
private void drawBody(Batch batch){
Vector2 position = body.getPosition();
//Gdx.app.log(TAG, heart.getWidth() + ", " + heart.getHeight());
batch.draw(heart, position.x-100,position.y-50, h_width*2, h_height*2);
font.draw(batch, "THIS IS A WOOOOOOOOO!", 100, 100);
font.draw(batch, "THIS IS A TEST!", position.x, position.y + 100);
font.draw(batch, "THIS IS A WOOOOOOOOO!", position.x, position.y - 100);
batch.draw(heart, position.x,position.y, h_width*2, h_height*2);
batch.draw(heart, position.x,position.y+ 100, h_width*2, h_height*2);
}
会画
这是一个有 6 次平局的例子,但你必须有一个“一次性”最后一个 .draw
private void drawBody(Batch batch){
Vector2 position = body.getPosition();
//Gdx.app.log(TAG, heart.getWidth() + ", " + heart.getHeight());
batch.draw(heart, position.x-100,position.y-50, h_width*2, h_height*2);
font.draw(batch, "THIS IS A WOOOOOOOOO!", 100, 100);
font.draw(batch, "THIS IS A TEST!", position.x, position.y + 100);
batch.draw(heart, position.x,position.y, h_width*2, h_height*2);
batch.draw(heart, position.x,position.y+ 100, h_width*2, h_height*2);
font.draw(batch, "THIS IS A WOOOOOOOOO!", position.x, position.y - 100);
batch.draw(heart, 10,10, h_width*2, h_height*2);
}
这是最后一件事...最后一批抽签...如果您尝试在 0, 0 抽签 -> 会发生这种情况
寻求任何有用的反馈和/或可能发生这种情况的原因。我是 LibGdx 的新手,不会回避您对我决定如何使用这个框架的反馈。
非常感谢!
【问题讨论】:
-
要打印窗口,请按 Alt+PrintScreen 或仅使用截图工具,如截图工具。这样就不会留下那样丑陋的伤口
标签: libgdx