【问题标题】:Draw a single sprite to Pixmap - LibGDX将单个精灵绘制到 Pixmap - LibGDX
【发布时间】:2016-03-13 21:33:16
【问题描述】:

我目前正在开发一款需要与对象进行像素完美碰撞的游戏。然而,我遇到的唯一障碍是实际获得对象的面具。我想过将一个对象的精灵(经过适当缩放和转换)渲染到 FrameBuffer,然后我会将其转换为像素图,但我没有运气(尝试了很多方法,包括 this

所以,我的问题是:有没有办法在 LibGDX 中将单个精灵渲染到像素图?

【问题讨论】:

    标签: java android libgdx collision


    【解决方案1】:

    听起来像是把马放在推车后面。 Sprite 是 Texture 的一个区域,它又是从文件 aka Pixmap 加载的图像。如果您只想从文件中加载图像,那么您可以这样做:new Pixmap(Gdx.files.internal("yourfile.png"));。您还可以缩放和转换坐标,而无需先渲染到 FBO。

    这就是说;在绑定 FBO 时,获取 FrameBuffer 的 Pixmap 与 taking a screenshot 一样“简单”,因为正是如此。

    fbo.begin();
    Gdx.gl.glClear(...);
    ... //render to the FBO
    Pixmap pixmap = ScreenUtils.getFrameBufferPixmap(0, 0, fbo.getWidth(), fbo.getHeight());
    fbo.end();
    

    请注意,这将是look like it is up-side-down

    但您可能只对像素数据感兴趣,因此在这种情况下您不妨跳过Pixmap 步骤并使用ScreenUtils.getFrameBufferPixels 方法。

    然而,也就是说;使用像素数据进行碰撞检测很可能不是您想要实现的最佳解决方案。相反,我建议您查看其他选项,例如查看this tool,它可用于将您的图像转换为碰撞形状。

    【讨论】:

    • 该工具的 +1。但是将纹理加载到像素图对我来说不起作用,因为我正在加载的图像是原来的 4 倍,并且不会恢复我给精灵的旋转。不过,我会检查 ScreenUtils 方法
    • 听起来你在做一个假设。像素完美意味着:像素完美。您在渲染精灵时进行的任何转换,您也可以在不渲染时进行(以及更多)。