Просто предупреждение: я новичок в java - я обычно использую UnrealScript и С#, но я разветвляюсь, так что, вероятно, одна или две вещи, которые я сделал неправильно или против обычной конвекции java (это было бы больше в выравнивании с убеждениями этих двух других языков)
Не стесняйтесь указывать на них, и я буду формировать их соответственно
Я использую JRPGish стиль игры в Java, используя BlueJ. Я не стремился к массовому росту, и я делаю это скорее как доказательство концепции, чем полноценную игру.
Пока все идет хорошо. У меня есть спрайт-анимация, работающая с использованием листа спрайтов, и игрок может ходить со спрайтом, изменяя правильную анимацию в зависимости от направления.
Однако у меня возникает проблема, когда игрок перестает двигаться - иногда это изображение после предыдущего кадра. Справедливости ради, это может происходить все время, за исключением того, что вы не видите его, если игрок перестает перемещаться по первому и последнему кадру ходячие анимации, поскольку они занимают одно и то же пространство пикселей и, следовательно, скрыты (если это имеет смысл)
Вот изображение проблемы в действии:
Это после того, как игрок переместился, а затем остановился, оставив последний кадр спрайта "moveRight".
Я создал небольшую версию моего проекта, у которой есть только анимация персонажа, когда вы нажимаете клавишу, и останавливаетесь при отпускании, в котором появляется проблема
Класс символов
Класс GameManager
Класс KeyManager
Чтобы запустить игру, запустите метод Main в GameManager
Вам нужно сохранить это изображение с именем файла "James.png" и поместить его в ту же папку проекта java, чтобы он работал
Заранее благодарим за предоставленную помощь.
paintComponent()
передает Graphics
на drawCharactor()
. drawCharactor()
не должен использовать этот объект Graphics
если вы не сделали копию, эта Graphics
является общей.
Кроме того, не вызывайте repaint()
из drawCharactor()
. repaint()
назначает другой цикл рисования. Вы уже вызываете repaint()
из таймера.
Не используйте java.util.Timer
используйте javax.swing.Timer
для рисования Swing. См. Раздел Использование таймеров поворота
Дополнительные сведения и примеры Выполнение пользовательской живописи и рисования в AWT и Swing.
Рассмотрите возможность публикации минимального примера.