我有一个包含名称的数组,然后使用以下方法显示适当的图形:
公共无效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);
}
}
}
这很好地显示了我的游戏的实际图形。然而,对于我的小地图,我做同样的事情,在 for 循环中的“i”和“j”中使用不同的值和增加的数字。这将创建具有更大范围的较小版本的地图,这让我有了这个。(注意,我只包含了其中一个 drawImage() 方法,我在这里删除了其余的方法以使代码更具可读性):
这几乎是我想要的效果(除了我可以轻松更改的定位),但是,这仅显示了我在屏幕上已经看到的较小版本。但是,任何大于约 20 x20 的尺寸,游戏开始严重滞后——可能与我编码它的糟糕方式有关。
我曾尝试使用 fillRect 将图像替换为正方形,但这无济于事。
如果有人想看看,这是我的主要课程的代码:http: //pastebin.com/eEQWs2DS
paintComponent 方法中的 for 循环从 3160 行左右开始,主显示的循环在 2678 左右。我将 Jframe 设置在 1260 左右。
所以,说了这么多,基本上我的问题是这样的:
有没有更好、更有效的方法来创建我的小地图?我的想法是在程序开始时生成一个图像,这样游戏就不必在每次帧刷新时重新计算。我可以提前创建地图,但每次更改地图时都必须手动更新,这绝对是一件麻烦事。我在研究如何做前者时遇到了麻烦。我的另一个想法是只降低小地图的刷新率,但我也不知道该怎么做。
除此之外,如果对滞后问题有任何简单的修复,请赐教。对于非常非常混乱的代码,我深表歉意——这是我第一次用显示器编写任何东西,所以我有点……在它工作之前一直在破解它。