【发布时间】:2021-06-11 04:16:56
【问题描述】:
我想以像素化风格绘制形状。 我目前使用 shaperenderer 绘制的圆圈以真实像素呈现。
但我更喜欢像素化。
我尝试使用相机和视口来获得效果,但没有成功。我更喜欢使用 FillViewport。
我们是否需要创建自己的 drawLine 函数并沿着一条线绘制小方块? 或者这可以通过保持纵横比的视口来完成吗?
是否有任何小型示例项目展示了如何创建像素化的简单形状。
我知道我可以自己编码,但我想避免在使用框架时。
在skretch中你可以画一条线,只需要指定像素大小,很简单。
有什么提示吗?
public class SimpleCirleActor extends Actor {
ShapeRenderer renderer;
float radius;
public SimpleCirleActor(int x , int y, float radius) {
setBounds(0,0, Constants.pixelsPerSector(),Constants.pixelsPerSector());
this.radius = radius;
setX(x);setY(y);
renderer = new ShapeRenderer();
}
@Override
public void draw(Batch batch, float parentAlpha) {
super.draw(batch, parentAlpha);
renderer.setProjectionMatrix(getStage().getCamera().combined);
renderer.begin(ShapeRenderer.ShapeType.Line);
renderer.setColor(Color.CYAN);
float x = getX();
renderer.circle(x, getY(), radius);
renderer.end();
}
@Override
public void act(float delta) {
super.act(delta);
}
}
【问题讨论】:
-
您可以绘制到一个小的帧缓冲区,然后将其绘制到屏幕上,根据需要放大。只需确保将帧缓冲区纹理过滤设置为最近的像素,以便保持硬边缘。
-
这是唯一的方法吗?
-
我试过了,效果很好。但它有一个很大的缺点,我们将只通过一个帧缓冲区到屏幕,这将覆盖之前绘制的所有内容。而且我不知道如何在帧缓冲区中绘制演员。我想必须有一个更简单的解决方案。我的意思是这是一个游戏框架,我希望我们可以防止任何黑客攻击。
-
你可以用 FrameBuffers 做任何你想做的事,除了 Libgdx 的支持并不像我记得的那样好。当您绘制到帧缓冲区时,您会创建一个纹理。这种纹理可以像任何其他纹理一样使用,即。就像 libgdx 用来将精灵绘制到屏幕上的纹理一样。我可以向您保证,您可以使用帧缓冲区做您想做的事情,但不能保证它不会变得比您想要的更混乱。也许您应该发布到目前为止您对帧缓冲区所做的工作,我可以尝试帮助您将其绘制到屏幕上,而不会过度绘制其他所有内容。
-
太棒了。谢谢。将准备一个小项目尽快展示。