Java - 如何在 if 语句中添加 rgb 值?
Java - How can I add rgb values in an if statement?
最近我想做一个游戏,我选择在制作地图时使用图像。这是一个正常的图像,像这样:
我想为每个红色像素 (255, 0, 0) 使用 if 语句绘制黑色矩形 32x32。我做了这个,但我无法让 RGB 工作:
loadMap()方法:
public void loadMap(BufferedImage image) {
int w = image.getWidth();
int h = image.getHeight();
for(int xx = 0; xx < w; xx++) {
for(int yy = 0; yy < h; yy++) {
int pixel = image.getRGB(xx, yy);
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = pixel & 0xff;
if(red == 255 && green == 0 && blue == 0)
handler.addObject(new Wall(xx*32, yy*32, ID.Wall, this));
}
}
}
墙 Class:
public class Wall extends GameObject {
public Wall(int x, int y, ID id) {
super(x, y, id);
}
public void update() {
}
public void render(Graphics g) {
g.setColor(Color.black);
g.fillRect(x, y, 32, 32);
}
public Rectangle getBounds() {
return new Rectangle(x, y, 32, 32);
}
}
游戏对象class:
public abstract class GameObject {
protected int x, y;
protected float speedX = 0, speedY = 0;
protected ID id;
public GameObject(int x, int y, ID id) {
this.x = x;
this.y = y;
this.id = id;
}
public abstract void update();
public abstract void render(Graphics g);
public abstract Rectangle getBounds();
... //Getter's and Setter's
}
谁能解释一下发生了什么事?我做错了什么吗?
提前致谢!
PS: 我已经检查了图像上的 RGB 值,它们是正确的,但它仍然不起作用:(
您的图像不包含 0x00FF0000
它是用不同的颜色渲染的,并且进行了抗锯齿处理。我发现你的图片有这些颜色:
(217,0,0) // main red
(127,0,0) // main anti aliased red
( 63,0,0) // bleeded anti aliased red
所以我会试试这个:
if ((red>120)&&(green==0)&&(blue==0)) ...;
我觉得在 if 条件下添加 ()
更安全。
PS. 令人耳目一新的是看到来自低代表用户的问题包含我们需要的所有信息 +1
最近我想做一个游戏,我选择在制作地图时使用图像。这是一个正常的图像,像这样:
我想为每个红色像素 (255, 0, 0) 使用 if 语句绘制黑色矩形 32x32。我做了这个,但我无法让 RGB 工作:
loadMap()方法:
public void loadMap(BufferedImage image) {
int w = image.getWidth();
int h = image.getHeight();
for(int xx = 0; xx < w; xx++) {
for(int yy = 0; yy < h; yy++) {
int pixel = image.getRGB(xx, yy);
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = pixel & 0xff;
if(red == 255 && green == 0 && blue == 0)
handler.addObject(new Wall(xx*32, yy*32, ID.Wall, this));
}
}
}
墙 Class:
public class Wall extends GameObject {
public Wall(int x, int y, ID id) {
super(x, y, id);
}
public void update() {
}
public void render(Graphics g) {
g.setColor(Color.black);
g.fillRect(x, y, 32, 32);
}
public Rectangle getBounds() {
return new Rectangle(x, y, 32, 32);
}
}
游戏对象class:
public abstract class GameObject {
protected int x, y;
protected float speedX = 0, speedY = 0;
protected ID id;
public GameObject(int x, int y, ID id) {
this.x = x;
this.y = y;
this.id = id;
}
public abstract void update();
public abstract void render(Graphics g);
public abstract Rectangle getBounds();
... //Getter's and Setter's
}
谁能解释一下发生了什么事?我做错了什么吗?
提前致谢!
PS: 我已经检查了图像上的 RGB 值,它们是正确的,但它仍然不起作用:(
您的图像不包含 0x00FF0000
它是用不同的颜色渲染的,并且进行了抗锯齿处理。我发现你的图片有这些颜色:
(217,0,0) // main red
(127,0,0) // main anti aliased red
( 63,0,0) // bleeded anti aliased red
所以我会试试这个:
if ((red>120)&&(green==0)&&(blue==0)) ...;
我觉得在 if 条件下添加 ()
更安全。
PS. 令人耳目一新的是看到来自低代表用户的问题包含我们需要的所有信息 +1