LibGDX 画线
我正在尝试使用 libGDX 制作类似弹弓的东西.
I'm trying to make something like a slingshot using libGDX.
我的代码
if (Gdx.input.isTouched()) {
ShapeRenderer sr = new ShapeRenderer();
sr.setColor(Color.BLACK);
sr.setProjectionMatrix(camera.combined);
sr.begin(ShapeType.Line);
sr.line(player.getLeft().x, player.getLeft().y,
Global.game_touch_position.x, Global.game_touch_position.y);
sr.line(player.getRight().x, player.getRight().y,
Global.game_touch_position.x, Global.game_touch_position.y);
sr.end();
}
这样做我会得到输出这看起来很糟糕,如果我在我的 android 手机上调试,logcat 会被消息发送垃圾邮件
Doing this i will have the output This looks awful, and if I debug on my android phone , the logcat is spammed by the message
02-17 18:55:27.371: D/dalvikvm(7440): GC_CONCURRENT freed 1884K, 40% free 8287K/13635K, paused 15ms+2ms, total 40ms
而且滞后,当我触摸屏幕时,我有 30 fps,当我不触摸时,我有 60...
And lags, I have like 30 fps when i touch the screen , and 60 when i don't...
我还需要画粗一点的线,所以当线变大时,我必须把它加粗,看起来很酷.
I also need to draw the line with a little bit of thickness, so when the line is bigger, i will have to make it thicker, to give a cool look.
在 libgdx 中绘制简单线条的最佳方法是什么?如果我找不到任何答案,我可能会从线的一点到另一点画圈......这看起来不错,但看起来不像弹弓......
Which is the best way to draw a simple line in libgdx ? If I won't find any answer probably i'm going to draw circles from a point of the line to the other..this would look ok , but won't look like a slingshot...
有什么帮助吗?
推荐答案
我只是在 helper 或 utils 类中有这样的东西.我通常用它来调试和可视化正在发生的事情.
I just have something like this in a helper or utils class. I usually use it for debugging and visualizing whats going on.
private static ShapeRenderer debugRenderer = new ShapeRenderer();
public static void DrawDebugLine(Vector2 start, Vector2 end, int lineWidth, Color color, Matrix4 projectionMatrix)
{
Gdx.gl.glLineWidth(lineWidth);
debugRenderer.setProjectionMatrix(projectionMatrix);
debugRenderer.begin(ShapeRenderer.ShapeType.Line);
debugRenderer.setColor(color);
debugRenderer.line(start, end);
debugRenderer.end();
Gdx.gl.glLineWidth(1);
}
public static void DrawDebugLine(Vector2 start, Vector2 end, Matrix4 projectionMatrix)
{
Gdx.gl.glLineWidth(2);
debugRenderer.setProjectionMatrix(projectionMatrix);
debugRenderer.begin(ShapeRenderer.ShapeType.Line);
debugRenderer.setColor(Color.WHITE);
debugRenderer.line(start, end);
debugRenderer.end();
Gdx.gl.glLineWidth(1);
}
现在我可以轻松地从任何我喜欢的投影矩阵上画一条线.
Now I can easily draw a line from anywhere I like on any projection matrix I want.
HelperClass.DrawDebugLine(new Vector2(0,0), new Vector2(100,100), camera.combined);
你想在其他 SpriteBatch
开始和结束之外绘制.如果您想在每帧中创建很多行,最好在单独的静态方法中开始和结束 ShapeRenderer,或者将其公开并根据您的需要自行完成.
You want to draw outside the other SpriteBatch
begin and end. And if you want to make a lot of lines each frame you are better off beginning and ending the ShapeRenderer in a separate static method or make it public and do it yourself depending on your needs.
显然,您可以为更多形状或更多重载创建更多方法.
Obviously you can create more methods for more shapes or more overloads.
相关文章