我克隆了并且能够从我从这里获得的Cuboc libgdx演示中生成一个功能应用程序:https://github.com/libgdx/libgdx-demo-cuboc
我试图理解Cuboc libgdx演示中的这段代码。我将在下面的代码中添加我的问题作为评论:
package com.badlogic.cubocy;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.utils.Array;
public class Map {
static int EMPTY = 0;
/***
*** why do these ints have to be in hex ?
***/
static int TILE = 0xffffff;
static int START = 0xff0000;
static int END = 0xff00ff;
static int DISPENSER = 0xff0100;
static int SPIKES = 0x00ff00;
static int ROCKET = 0x0000ff;
...
private void loadBinary () {
/***
*** how did the file "levels.png" get created ?
***/
Pixmap pixmap = new Pixmap(Gdx.files.internal("data/levels.png"));
tiles = new int[pixmap.getWidth()][pixmap.getHeight()];
for (int y = 0; y < 35; y++) {
for (int x = 0; x < 150; x++) {
/***
*** What's up with the bitwise operations?
***/
int pix = (pixmap.getPixel(x, y) >>> 8) & 0xffffff;
if (match(pix, START)) {
...
} else if (match(pix, DISPENSER)) {
...
} else if (match(pix, ROCKET)) {
...
} else {
tiles[x][y] = pix;
}
}
}
...
谢谢!
答案 0 :(得分:1)
他们不必使用十六进制,但这是一种方便的方法,可以在图像文件中查看与其对应的颜色,并将其用作地图。
此游戏的地图编辑器基本上是MSPaint。有人在艺术计划中画了png文件。图像文件中的每种颜色都与此类顶部的常量int之一匹配。
Pixmap int是RGBA,但显然只使用RGB值。如果你看一下顶部的常量int,它们都不使用32位整数的前8位。因此,该行上的按位运算会丢弃图像的一部分像素(>>>8
),并为我们提供RGB int。我不太熟悉位移。在使用无符号移位& 0xffffff
而不是签名移位>>>
后,使用>>
屏蔽它似乎是多余的,但也许我错过了某些内容。