Я разрабатываю игру на Java, которая использует легкую библиотеку игр Java (LWJGL) с OpenGL.Вызов методов класса, создавшего этот экземпляр
У меня возникла следующая проблема.
Я хочу создать ArrayList всех текстур в объекте в основном цикле и получить доступ к ним из объектов, созданных в этом главном объекте. Упрощенный пример:
game.class:
public class Game {
ArrayList Textures; // to hold the Texture object I created
Player player; // create Player object
public Game() {
new ResourceLoader(); // Here is the instance of the ResourceLoader class
player = new Player(StartingPosition) // And an instance of the playey, there are many more arguments I give it, but none of this matter (or so I hope)
while(true) { // main loop
// input handlers
player.draw() // here I call the player charcter to be drawn
}
}
// this method SHOULD allow the resource loader to add new textures
public void addTextures (Texture tx) {
Textures.add(tx);
}
}
ResourceLoader.class
public class ResourceLoader {
public ResourceLoader() {
Interface.this.addTexture(new Texture("image.png")); // this is the line I need help with
}
}
Player.class
public class Player {
public player() {
// some stuff, including assignment of appropriate textureID
}
public void draw() {
Interface.this.Textures.get(this.textureID).bind(); // this also doesn't work
// OpenGL method to draw the character
}
}
В моем реальном коде класс ResourceLoader
содержит около 20 текстур для загрузки.
В игре есть более 400 объектов, которые имеют метод рисования, как и Player.class
, и большинство из них имеют одну и ту же текстуру; например есть около 150-180 стеновых объектов, все они показывают одинаковое изображение кирпичей.
Объект Game
не является основным классом и у него нет метода static void main()
, но это одна из немногих вещей, созданных в способе игры main()
.
Кроме того, в прошлом я работал над проблемой, позволяя каждой сущности загружать собственный файл текстур. Но по мере того, как я увеличивал сложность и размер карты, становится очень неэффективно загружать одно и то же изображение сотни раз.
Я пришел к состоянию вышеприведенного кода от this ответа.
Я считаю, что я должен был бы поставить ResourceLoader.class
и Player.class
внутри game.class
, который не был бы хорошим решением, учитывая, что существует около 20 файлов, которые необходимо это лечение, и большинство из них являются длинные 200+ линии.
Я думаю, что мой объект Texture
, а также инициализация OpenGL и другие материалы довольно общие и не должны влиять на проблему. Я могу предоставить их, если это необходимо.
Это сработало! Спасибо! Для тех, кто хочет использовать этот метод, помните, что вы должны инициализировать 'ArrayList' (я тоже забыл, что при создании этого потока),' Game' является «интерфейсом», я просто забыл изменить эти две строки, пока я был очистка кода, извините. – KrisRogo