了解cuboc libgdx的例子

时间:2014-11-13 03:09:29

标签: java android libgdx

我克隆了并且能够从我从这里获得的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;
                }
            }
        }

 ...

谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 他们不必使用十六进制,但这是一种方便的方法,可以在图像文件中查看与其对应的颜色,并将其用作地图。

  2. 此游戏的地图编辑器基本上是MSPaint。有人在艺术计划中画了png文件。图像文件中的每种颜色都与此类顶部的常量int之一匹配。

  3. Pixmap int是RGBA,但显然只使用RGB值。如果你看一下顶部的常量int,它们都不使用32位整数的前8位。因此,该行上的按位运算会丢弃图像的一部分像素(>>>8),并为我们提供RGB int。我不太熟悉位移。在使用无符号移位& 0xffffff而不是签名移位>>>后,使用>>屏蔽它似乎是多余的,但也许我错过了某些内容。