Сейчас я слежу за серией видеоуроков на YouTube, а именно за учебником по программированию игр от TheChernoProject. Я добрался до эпизода 36, который посвящен рендерингу уровня из тайлов. Не буду вдаваться в подробности, но столкнулся со странной проблемой, с которой никто не сталкивался (по крайней мере, никто не обращался с ней за помощью).
Точнее: у меня есть класс Sprite, Класс Tile (с двумя расширяющими его классами: GrassTile и VoidTile) и класс Level. Уровень состоит из Тайлов, которые сделаны из спрайтов. Вы можете увидеть плитку здесь:
public static Tile grass = new GrassTile(Sprite.grass);
public static Tile voidTile = new VoidTile(Sprite.voidSprite);
И спрайт создается так:
public static Sprite grass = new Sprite(16, 0, 0, Spritesheet.tileset);
public static Sprite voidSprite = new Sprite(16, 0x00AAFF);
Два конструктора для спрайтов: это
(int size, int x, int y, Spritesheet sheet)
(int size, int colour)
И уровень генерируется случайным образом с полями в диапазоне от 0 до 3 (0 - это трава, остальное на данный момент просто VoidTile. Но что-то не так с тем, как он отображает графику. Я проверил это с помощью printlns, и я уверен, что большая часть этого работает (он назначает правильные тайлы, в зависимости от ID). Вы можете увидеть это здесь:
ID: 0 | Tile: com.ekhart.game.level.tile.GrassTile@73d74138 | Sprite: com.ekhart.game.gfx.Sprite@3d0c51ef
ID: 2 | Tile: com.ekhart.game.level.tile.VoidTile@3ba0d916 | Sprite: com.ekhart.game.gfx.Sprite@3d0c51ef
ID: 3 | Tile: com.ekhart.game.level.tile.VoidTile@3ba0d916 | Sprite: com.ekhart.game.gfx.Sprite@3d0c51ef
ID: 1 | Tile: com.ekhart.game.level.tile.VoidTile@3ba0d916 | Sprite: com.ekhart.game.gfx.Sprite@3d0c51ef
И вы могли заметить, что Sprite одинаковы, хотя когда я создаю классы grass и voidTile, им назначаются разные спрайты. И странная часть заключается в том, что назначенный спрайт зависит от порядка, в котором я их создаю. Теперь все тайлы имеют графику voidSprite, потому что я создал VoidTile последним. Когда я меняю их местами (делая GrassTile последним), у них у всех есть спрайт травы. Я пробовал все, что мог придумать, чтобы заставить эту работу работать, но это не так. Я загрузил папку проекта, так что вы можете импортировать ее и проверить код, возможно, я что-то пропустил.
URL-адрес проекта: https://dl.dropboxusercontent.com/u/18909657/TheGame.rar< /а>