gpt4 book ai didi

java - 快速重绘 map 的有效方法(Java/JPanel)

转载 作者:行者123 更新时间:2023-11-30 04:59:05 24 4
gpt4 key购买 nike

我目前正在开发一款简单的 2D 自上而下射击游戏,您可以在其中围绕 map 操纵角色。图形仍处于“测试”阶段(纯色和矩形)。绘制过程如下:

  • 我将 map (这基本上只是墙壁或自由空间)存储为整数数组,然后循环遍历并绘制到我的 JPanel 上。
  • 绘制 map 后,我会检查 map 上的每个“实体”(能力提升、其他角色)并放置它们。
  • 最后,我绘制用户的角色

我尝试了不同的方法,最终决定用户的角色将保持在屏幕的中心,而 map 则围绕其移动。

目前,它可以工作,但看起来很慢。我只有 4 面墙、2 个实体,并且正在绘制用户的角色,帧率为 90FPS,经常在 60-70 左右飙升。如果游戏已经完成,这是可以接受的,但是我仍然有更精美的图形、更多的实体、墙壁、子弹等要渲染到 map 上。我尝试提高 gameLoop 的速度,最高可达 230 FPS,但即便如此,当我进入有实体或墙壁的区域时,它的速度仍会飙升至 50-70。

我尝试将所吸引的内容限制为仅可见的内容,但结果总体上可以忽略不计,甚至是负面的。

当前的paintComponent()方法看起来像这样:

public void painComponent(Graphics g) {

for(int x = 0; x < Map.size.getWidth() ; x++) {

for(int y = 0; y < Map.size.getHeight(); y++) {

if(mapArray[y][x] == WALL) {
g.setColor(Color.BLACK);
g.fillRect(x, y, wallSize, wallSize);
}

}
}

for(int i = 0; i < map.countEntities(); i++) {

Entity obj = map.getEntity(i);

g.setColor(Color.WHITE);
g.fillRect(obj.getCoords().x, obj.getCoords().y, obj.getSize().width, obj.getSize().height);

}

Robot bot = map.getPlayerBot();

g.setColor(Color.BLACK);
g.fillRect(bot.getCoords().x, bot.getCoords().y, bot.getSize().width, bot.getSize().height);
}

你们中的任何专家有任何加快速度的技巧吗?

最佳答案

除了以下链接中提到的答案之外: Java 2D Drawing Optimal Performance , Java2D Performance Issues , Java 2D game graphicsHow to display many SVGs in Java with high performance

提高 2D 性能的一个常见且简单的技巧是将所有静态对象(“背景”)绘制到缓冲图像中,然后在绘制下一个图像时,您只需相应地从前一个屏幕偏移背景图像的像素,那么您只需要在屏幕的最多两个边缘绘制像素,而不是整个屏幕,只有当您在屏幕上绘制大量图像层时,这才真正重要。

除此之外,请确保启用了双缓冲,以便在您仍在绘制下一个图像时绘图不会尝试绘制到实际屏幕。

关于java - 快速重绘 map 的有效方法(Java/JPanel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7543136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com