У меня есть массив, который содержит имена, а затем отображает соответствующую графику с помощью:Как сделать простую мини-карту для рпг игры Java
общественного недействительного paintComponent (График г) {
for(int i = 0; i<20; i++)
{
for(int j = 0; j<20; j++)
{
if(testMap.getData(i+(rowX-7), j+(columnY-7)).indexOf("rock") >= 0)
{
g.drawImage(image3, j*50 + 5*add, i*50 + 5*add2, 50, 50, this);
}
}
}
Это хорошо отображает фактическую графику моей игры. Однако для моей мини-карты я делаю то же самое, с разными значениями и увеличенными числами в «i» и «j» в цикле for. Это создает меньшую версию карты с большим объемом, что оставляет меня с этим. (Обратите внимание, я включен только один из DrawImage() методы, я удалил все остальное здесь, чтобы сделать код более читаемым):
Это в значительной степени мой желаемый эффект (в сторону от позиционирования, который Я могу легко меняться), однако это показывает только меньшую версию того, что я уже вижу на экране. Однако, чем больше 20 x20, и игра начинает сильно задерживаться - возможно, что-то связано с ужасным способом, которым я его закодировал.
Я попытался заменить изображения квадратами с помощью fillRect, но это не поможет.
Вот код моего основного класса, если кто-нибудь хотел бы посмотреть: http://pastebin.com/eEQWs2DS
для цикла в рамках метода paintComponent начинается около линии 3160, петля для основного дисплея составляет около 2678. I настроить JFrame около 1260.
Итак, со всем, что сказал, в основном мой вопрос заключается в следующем:
есть ли лучший, более эффективный способ создать свои миникарты? Моя идея состояла в том, чтобы сгенерировать изображение в начале программы, чтобы игра не приходилась пересчитывать каждый раз, когда кадр обновляется. Я мог бы создать карту заранее, но мне пришлось бы вручную обновлять ее каждый раз, когда я изменил карту, что определенно является проблемой. У меня возникают проблемы с поиском того, как это сделать. Моя другая идея - замедлить частоту обновления только мини-карты, но я также не знаю, как это сделать.
Кроме этого, если есть какие-либо простые исправления проблемы с задержкой, пожалуйста, просветите меня. Я прошу прощения за очень, очень грязный код. Это мой первый программный код с дисплеем, поэтому я вроде как ... взломал его, пока он не сработал.
Это была моя первая идея, которую я имел. Я попытался изменить цвета с помощью fillRect, но все же произошел такой же лаг. Я думаю, проблема заключается в том, что я пытаюсь напечатать 2500 изображений на 5 квадратных пикселей каждые двадцать раз в секунду. –
Возможно, попробуйте упростить объем данных на карте. Например, вместо того, чтобы иметь 50x50 квадратов, используйте 15x15 или что-то подобное, но сделайте квадраты более крупными. Например, если у вас есть дорога шириной 3 квадрата на обычной карте, это займет больше места на мини-карте, чем должно было бы, но это было бы достаточно хорошим представлением дороги на карте. Точно так же дома могут занимать только 1 плиту или большую площадь 2x2, возможно, на мини-карте и не могут масштабироваться, но достаточно точно представляют, где находятся дома. – Feles
Возможно, вместо i ++ и j ++ в цикле for я использую i = i + 4 и т. Д.? Спасибо, я попробую. –