【发布时间】:2018-06-15 03:08:11
【问题描述】:
我正在参考 RealtutsGML 的 java 游戏编程系列创建一个 java 游戏。我很难理解这段代码的某些部分是如何工作的。我了解图像部分的 getWidth 和 getHeight 但在 for 循环中,我迷路了。
向导类是玩家,方块是地图周围的屏障。该地图是我在 Photoshop 中制作的 64 x 64 图像,由一堆红色像素组成,这些像素代表应该在其中生成块对象的位置,以及一个代表向导/玩家生成位置的绿色像素。
private void loadLevel(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 pixels = image.getRGB(xx, yy);
int red = (pixels >> 16) & 0xff;
int green = (pixels >> 8) & 0xff;
int blue = (pixels) & 0xff;
if(red == 255)
handler.addObject(new Block(xx * 32, yy * 32, ID.Block));
if(green == 255)
handler.addObject(new Wizard(xx * 32, yy * 32, ID.Player,
handler));
}
}
}
我难以理解的部分是int pixels = image.getRGB(xx, yy)
这是否意味着像素存储红色、绿色和蓝色的值,如果是,像素如何存储多个值?
下一部分我不明白的是
int red = (pixels >> 16) & 0xff;
int green = (pixels >> 8) & 0xff;
int blue = (pixels) & 0xff;
为什么我们将红色、蓝色和绿色变量的像素向右移动 16 和 8,然后在它们上加上 & 0xff?
最后一部分是为什么我们将 handler.addObject 方法中的 xx 和 yy 值乘以 32。每个块对象和向导对象都是 32 乘 32,但为什么我们需要将整个图像乘以 32。
我已经查看了 oracle 网站来解释 & 位运算符,它确实有点帮助,但我仍然很难理解它在这种情况下是如何工作的。
【问题讨论】:
标签: java bitwise-operators bufferedimage game-development