Я увлекаюсь написанием 2D-игры и наткнулся на определенную проблему.Моя игра основана на плитке (около 12x9 плиток), в целом все хорошо, но время от времени, когда персонаж перемещается, рамка становится размытой и появляются черные сегменты.
Мой фон основан на плитке, и я думаю, что этовызвано их неправильным размещением.По моему мнению, это происходит потому, что у меня есть нить обновления и нить рисования, которые работают с одинаковыми переменными, например:
private int x, y;
public void update() {x++; y += 2;}
public void draw(Canvas canvas) {canvas.drawBitmap(someImage, x, y);}
(Примечание: я только что это придумал, так что это будет немноголегче понять, о чем я говорю.)
И в результате между некоторыми из плиток, которые обновляются во время рисования, есть (черные) промежутки.
Если я действительно прав,Я думаю, мне нужно решить проблему критического сечения.Поэтому я попытался просто взаимно закрепить данные, синхронизируя потоки и заставляя их работать последовательно.Результат был действительно печальным: он был ДЕЙСТВИТЕЛЬНО медленным на моей galaxy S, абсолютно неиграбельным!
Моя другая идея (которую я действительно не хочу делать) - добавить класс «drawAction» к каждому рисуемому объекту вигра, которая сохранит «снимок» своего объекта, и только эта коллекция «снимков» будет мьютексирована, поэтому я могу позволить потоку рисования выполнять свою работу без прерывания потоком обновления.
Пожалуйста, поделитесьсо мной твои идеи.Я надеюсь, что у вас есть лучшие решения или, если я ошибаюсь, возможно, вы поможете мне найти источник.
Редактировать: Моя игра в целом работает нормально, но на медленных устройствах (таких как эмулятор)помехи более заметны.Когда персонаж игрока не двигается, он тонет и почти всегда во время ходьбы.Я предпочитаю использовать только мой код, поэтому я хотел бы решить эту проблему, а не просто обойти, как с помощью какого-то движка или фреймворка.