我在阵列中的所有纹理都是一样的

时间:2015-05-15 20:30:15

标签: java arrays opengl lwjgl

所以我正在制作一个引用的纹理数组,所以我可以在渲染循环之外使用它们,但是所有的图像都在数组内部相同。

Texture[] loadTextures(){
        //Loading Textures
        Texture[] textures = new Texture[56];

        for (int ii = 0; ii < 56; ii++) {
            System.out.println(ii);
            try {
    //*//       textures[ii] = TextureLoader.getTexture("png",
                     new FileInputStream(new File("res/Cards/"+ii+".png")));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                Display.destroy();
                System.exit(1);
            } catch (IOException e) {
                e.printStackTrace();
                Display.destroy();
                System.exit(1);
            }
        }
        return textures;
    }

请告诉我,如果您需要我的其余代码,我怀疑问题在于行*。

//我在寻找自己答案的记录//

VOID - 可能的解决方案//我一直在查看opengl文档,绑定纹理时会调用 ARRAY TEXTURE ,但我不知道不了解文档中的大多数术语。 (这页明确告诉我:more documentation (in english)

1 个答案:

答案 0 :(得分:0)

我在游戏中完成了以下操作。

- 我放了一个&#34; quickLoader&#34;我游戏中的方法。

代码:

    public static Texture quickLoad(String name){
    Texture tex = null;
    tex = loadTexture("res/img/" + name + ".png", "PNG");
    return tex;
}

loadTexture方法:

    public static Texture loadTexture(String path, String fileType){
    Texture tex = null;
    InputStream in = ResourceLoader.getResourceAsStream(path);
    try {
        tex = TextureLoader.getTexture(fileType, in);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return tex;
}

创建了一个枚举来存储所有类型的纹理(图块)

public enum TileType {

stone("stone", true),
dirt("dirt", false);

public String textureName;
boolean solid;

TileType(String textureName, boolean solid){
    this.textureName = textureName;
    this.solid = solid;
}

}

括号中的第一个文字是图像的文件名。

stone("stone", true),

&#34;石&#34;是文件的名称。

然后我使用了#34; tile&#34;上课做所有的定位,纹理和绘画。

    private float x, y, width, height;
private Texture texture;
private TileType type;

public Tile(float x, float y, float width, float height, TileType tile){
    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
    this.texture = quickLoad(tile.textureName);
    this.type = tile;
}

public void draw(){
    drawQuadTex(texture, x, y, width, height);
}

drawQuadTex方法:

    public static void drawQuadTex(Texture tex, float x, float y, float quadWidth, float quadHeight){
    tex.bind();
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTranslatef(x, y, 0);
    glBegin(GL_QUADS);


    glTexCoord2f(0, 0);
    glVertex2f(0, 0);

    glTexCoord2f(1, 0);
    glVertex2f(quadWidth, 0);

    glTexCoord2f(1, 1);
    glVertex2f(quadWidth, quadHeight);

    glTexCoord2f(0, 1);
    glVertex2f(0, quadHeight);

    glEnd();
    glLoadIdentity();

}

所以现在我们有一个很好的基础来处理纹理瓷砖。现在为阵列。

    public TileChanger(GridHandler grid){
    this.grid = grid;
    this.types = new TileType[2];
    this.types[0] = TileType.stone;
    this.types[1] = TileType.dirt;
    this.index = 0;
}

请记住,你必须在这里和那里调整一些值。

你可以想出一些东西让它们在屏幕上绘制,但我在一个名为&#34; map&#34;的双重int数组中使用它们。 (map [] [])并使用数组列表中的数字来制作地图,所以我无法真正帮助你。

我希望这有帮助,或者至少让你更近一步。

编辑:哎呀这篇文章是1岁......