我在使用Java构建的视频游戏中遇到了一个相当令人不安的问题。在您将其设置为垃圾邮件之前,请注意我已经查看了这两个链接,但他们没有以任何方式帮助我:
我需要做的是从我的精灵中获取颜色0xFF00FF并将其设置为透明,以便显示charecter,而不仅仅是他背后的背景。这就是我所拥有的:
(抱歉没有足够的“声望”,但这里是图片的链接。) 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=114903427794927596233
我有一个主要的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
提前谢谢。
答案 0 :(得分: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通道数据。