【问题标题】:How to draw rotated image on pixmap (LibGDX)如何在像素图(LibGDX)上绘制旋转图像
【发布时间】:2014-04-21 22:10:41
【问题描述】:

如何将图像绘制到 Pixmap,但旋转了某个角度,就像在 Batch 上绘制时一样?没有像批量绘图方法那样将角度作为参数的 Pixmap 方法。

【问题讨论】:

  • 我现在还没准备好对其进行编码,但是您可以使用双循环来遍历原始像素图并获取像素并将它们移动到新像素图中的新位置。如果可以的话,似乎更容易创建一个精灵并旋转它
  • 嗯,我在我的游戏中使用了一个巨大的像素图作为地图。有时我正在改变它(他们将它移动到纹理,以加快绘制速度),有时我正在读取像素以检测与一些移动对象的碰撞,所以精灵/纹理对我不利。不幸的是,我猜不支持绘制旋转图像..
  • stackoverflow.com/questions/12548532/… 尝试这样的事情。不完全是你想要的,但这会导致你的答案。这将是一个有点密集的事件
  • 嗯...谢谢。我没有认真考虑这种解决方案,因为我害怕我能得到的表演。不过再说一次,我不经常画这种画,所以我会尝试一下。
  • 你只需要生成它而不是每帧都绘制它

标签: libgdx image-rotation pixmap


【解决方案1】:

好的,这是我设法制作的代码(实际上是从这里借用和调整的:Rotate Bitmap pixels):

public Pixmap rotatePixmap (Pixmap src, float angle){
    final int width = src.getWidth();
    final int height = src.getHeight();
    Pixmap rotated = new Pixmap(width, height, src.getFormat());

    final double radians = Math.toRadians(angle), cos = Math.cos(radians), sin = Math.sin(radians);     


    for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
            final int
            centerx = width/2, centery = height / 2,
            m = x - centerx,
            n = y - centery,
            j = ((int) (m * cos + n * sin)) + centerx,
            k = ((int) (n * cos - m * sin)) + centery;
            if (j >= 0 && j < width && k >= 0 && k < height){
                rotated.drawPixel(x, y, src.getPixel(j, k));
            }
        }
    }
    return rotated;

}

它从传递的源 Pixmap 创建并返回旋转的 Pixmap。它围绕中心旋转,在 PC 和我的 HTC Sensation 上实际上非常快。

并且不要忘记在使用后处理你得到的 Pixmap。

如果有系统解决方案会更优化,有旋转点坐标,但这对我有用,希望对其他人有所帮助。

【讨论】:

  • 你应该写“rotated.drawPixel(width - x, ...”来防止水平图像
【解决方案2】:

您的代码将 k 和 j 颠倒了。按原样,0 度角应该画出同样的东西,但事实并非如此。它旋转 90 度。所以这一行应该是

rotated.drawPixel(x, y, src.getPixel(j, k));

而不是

rotated.drawPixel(x, y, src.getPixel(k, j));

否则,就像冠军一样工作。

【讨论】:

  • P.S.你确定它不是这样对角翻转的吗?
  • 我不这么认为。我正在使用它为 RPG 中的武器创建库存图标,并且对于通常直上直下的剑图像,315 度的角度是逆时针 45 度(指向西北)。跨度>
猜你喜欢
  • 2016-03-25
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多