我持有的名称,然后数组使用显示相应的图形:如何使一个简单的迷你地图为Java RPG游戏
公共无效paintComponent(图形G){
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);
}
}
}
这很好地显示了我的游戏的实际图形。然而,对于我的小地图,我做同样的事情,不同的值和增加的数字在'我'和'j'在for循环。这会创建一个更小版本的地图,这个地图会有更大的范围,这让我感到很开心。 (请注意,我只包括的drawImage()的一个方法,我删除了在此休息,使代码更易读):
这几乎是从定位,我想要的效果(除了其中我可以很容易地更改),但是,这只显示我已经在屏幕上看到的较小版本。尽管如此,任何大于20x20的比赛,游戏开始严重滞后 - 可能与我编码它的可怕方式有关。
我试图用fillRect替换正方形的图像,但它没有帮助的问题。
这里是我的主类的代码,如果有人想看一看:http://pastebin.com/eEQWs2DS
的对的paintComponent方法内循环开始在各地线3160,主显示屏循环大约是2678.我建立JFrame的大约1260
因此,与所有的说,基本上我的问题是这样的:
有没有创造我的小地图更好的,更有效的方式?我的想法是在程序开始时生成一个图像,以便游戏在每次刷新帧时都不必重新计算。我可以提前创建地图,但每次更改地图时都必须手动更新,这绝对是一件麻烦事。我很难研究如何做前者。我的另一个想法是只减慢小地图的刷新率,但我也不知道该怎么做。
除此之外,如果对滞后问题有任何简单的修正,请赐教。我为非常非常混乱的代码表示歉意 - 这是我第一次用显示器编程任何东西,所以我只是......砍了它,直到它工作。
这是我的第一个想法,我有。我曾尝试使用fillRect更改颜色,但同样的滞后仍然发生。我认为问题在于我试图以每秒20次的5个方块像素打印2500张图像。 – 2013-02-13 01:16:51
也许试图以某种方式简化地图中的数据量。例如,不是使用50x50的正方形,使用15x15或类似的东西,而是使正方形代表更大的区域。例如,如果在常规地图上有一条3平方公里的道路,它会在小地图上占用更多的空间,但它在地图上可以代表道路。同样,房屋可能只占用1块瓦片,或者更大的瓦块,也许在小地图上可能有2×2的面积,可能不会成比例,但可以相当准确地表示房屋的实际位置。 – Feles 2013-02-13 01:31:29
也许不是for循环中的i ++和j ++,我使用i = i + 4等? 谢谢,我会尽力的。 – 2013-02-13 01:35:03