0

我在使用 Java 构建的视频游戏中遇到了一个相当麻烦的问题。在您将其设置为垃圾邮件之前,请注意我已经查看了这两个链接,但它们并没有以任何方式帮助我:

  1. 在不透明的 BufferedImage 上绘制透明的 BufferedImage
  2. 使 BufferedImage 上的某种颜色变得透明

我需要做的是从我的精灵中获取颜色 0xFF00FF 并将其设置为透明,以便角色出现,而不仅仅是他身后的背景。这是我所拥有的:

(抱歉没有足够的“声誉”,但这里有一个图片链接。) https://plus.google.com/photos/yourphotos?enfplm&hl=en&utm_source=lmnavbr&utm_medium=embd&utm_campaign=lrnmre&rtsl=1&partnerid=selm0&pid=5940308896707611042&oid=11499023372

我有一个主 BufferedImage 和一个用于该图像中数据的像素 [] 数组,我将关卡渲染到屏幕上,然后渲染播放器。这是我在渲染之前更新图像的方法:

private void tickImage() {

    final int centerY = (HEIGHT / 2) - (48 / 2);
    final int centerX = (WIDTH / 2) - (48 / 2);

    display.clear();
    display.renderBlock(StoneBlock.block, xMove, yMove);

    display.renderPlayer(knight, centerX, centerY);

    for (int a = 0; a < pixels.length; a++) {
        pixels[a] = display.pixels[a];
    }
}

如果您想查看其余代码,请随意到这里:

https://github.com/NikolaAndMichael/WarDungeon/tree/master/WarDungeon/src/net/naprav/wardungeon

先感谢您。

4

1 回答 1

0

像这样:

BufferedImage img = ...;
for (int x = 0; x < img.getWidth(); ++x)
for (int y = 0; y < img.getHeight(); ++y)
{
   if ((img.getRGB(x, y) & 0x00FFFFFF) == 0xFF00FF) 
   {
       img.setRGB(x, y, 0);
   }
}

这样做是遍历每个像素并测试红色、绿色和蓝色分量以匹配0xFF00FF. 如果匹配,请将颜色设置为透明黑色 ( 0x00000000)。为了只测试 RGB 通道而不是 Alpha 通道,请使用按位运算符过滤掉 Alpha 通道数据。

于 2013-10-29T22:40:32.657 回答