2013-05-15 1 views
0

Теперь я следую серии видеоуроков на YouTube, чтобы быть конкретным учебником по программированию игры TheChernoProject. Я добрался до эпизода 36, который посвящен отображению уровня из плиток. Я не буду вдаваться в подробности, но столкнулся с той странной проблемой, с которой никто не сталкивался (по крайней мере, никто не просил об этом помощи).
Чтобы быть более точным: у меня есть класс Sprite, класс Tile (с двумя классами, расширяющими его: GrassTile и VoidTile) и класс уровня. Уровень косички плиток, которые сделаны из спрайта. Вы можете увидеть плитку здесь:Некорректная графика спрайтов назначена на плитки

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, и я уверен, что большинство из них работает (это делает ssign correct Tiles, в зависимости от ID). Вы можете увидеть его там:

ID: 0 | Tile: [email protected] | Sprite: [email protected] 
ID: 2 | Tile: [email protected] | Sprite: [email protected] 
ID: 3 | Tile: [email protected] | Sprite: [email protected] 
ID: 1 | Tile: [email protected] | Sprite: [email protected] 

И вы могли бы заметить, что Sprite то же самое, несмотря на то, когда я создаю траву и классы voidTile, они имеют разные спрайты, возложенные на них. И странная часть заключается в том, что назначенный спрайт зависит от порядка, в котором я их создаю. Теперь все плитки имеют графику voidSprite, потому что я создал VoidTile последним. Когда я их обмениваю (последнее делает GrassTile), у всех есть травяной спрайт. Я пробовал все, что мог придумать, чтобы сделать эту работу, но это не так. Я загрузил папку проекта, поэтому вы можете импортировать ее и проверить код, возможно, я что-то пропустил. URL

Проект: https://dl.dropboxusercontent.com/u/18909657/TheGame.rar

+0

Это может быть лучшим вопросом для http://gamedev.stackexchange.com – ninesided

+0

Вам нужно сделать еще несколько отладок, по крайней мере, чтобы изолировать код от сбоя, а затем опубликовать его. Никто здесь не собирается проходить через массивный файл rar. Голосование закрывается. Убедитесь, что вы не используете статическое неуместное, что вы создаете новые объекты спрайтов, где это необходимо, в циклах. –

ответ

1

ОК, я лгал и сделал смотреть на файл RAR, и вы являются с использованием статического некстати, как я подозревал:

public class Tile { 

public int x; 
public int y; 

public static Sprite sprite; 

public static Tile grass = new GrassTile(Sprite.grass); 
public static Tile voidTile = new VoidTile(Sprite.voidSprite); 

public Tile(Sprite sprite) { 
    Tile.sprite = sprite; 
} 

public void render(int x, int y, Screen screen) { 
} 

public boolean solid() { 
    return false; 
} 

} 

Делая поле спрайт статичны, это то же самое для всех экземпляров Tile.

Решение:

  • не используют статические некстати. Переменная Sprite спрайта не должна быть статичной.
  • Опубликуйте соответствующий код на этом сайте, чтобы нам не нужно было выполнять работу с scut для вас, что вы должны делать сами, например, копать ошибку.
  • Не смешивайте компоненты AWT и Swing без необходимости.

Обратите внимание, что если ваш компилятор жалуется на вас, когда вы меняете спрайт на нестатический, тогда вы должны исправить другой код, который использует поле спрайта, а не повторять статический спрайт.

 Смежные вопросы

  • Нет связанных вопросов^_^