所以我正在制作一个引用的纹理数组,所以我可以在渲染循环之外使用它们,但是所有的图像都在数组内部相同。
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))
答案 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岁......