Java Swing 重/慢的paintComponent - 有什么建议吗?

2023-11-30

我正在制作一个基于滚动 2D 地图/图块的游戏。每个图块(存储为tile[21][11] - 每张地图总共 231 个图块)最多可以包含 21 个值(存储为 int[3][7])。当全屏显示时,我会同时看到大约 8 张地图。

平均而言,每张地图的绘制时间约为 0.03 秒(通过 System.nanoTime 发现)。问题是,一旦屏幕上出现超过 1 个地图,Swing 事件轮询就会明显变慢。

有什么办法解决这个问题吗?我无法一次性绘制地图​​并将其保存为图像,因为它具有涉及移动演员的透明度,因此它更改得太频繁。另外,我不认为我可以调用 PaintComponent 中的线程来绘制地图而不出现故障,但我并不肯定。


My Tiles不属于任何类型JComponent,它们只是数据。我称他们的容器为MapPane,绘制其中的所有图块paintComponent.

同样地,JTable单元格只是在 a 内呈现的数据JComponent;提到的蝇量模式here,仍然适用:目标是省略渲染不可见单元的任何努力。Profile and 自拍以优化渲染为目的;一些方法在KineticModel cited here.

A BufferedImage不需要缩放是最好的。如果必须扩展,请尝试RenderingHints与插值类型有关。如果合成成本太高,请使用在后台构建地图SwingWorker; publish()当它们变得可用时,并且process()他们在 EDT 上,如图所示here.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Swing 重/慢的paintComponent - 有什么建议吗? 的相关文章

随机推荐

  • 使用python创建多列的虚拟变量

    我正在处理一个包含两列 ID 号的数据框 为了进一步研究 我想为这些 ID 号 带有两个 ID 号 制作一种虚拟变量 但是 我的代码不会合并两个数据帧中的列 如何合并两个数据帧中的列并创建虚拟变量 数据框 import pandas as
  • iOS 7(非越狱)Wi-Fi RSSI 值

    是否可以在未越狱的 iOS 7 设备上获取 Wi Fi RSSI 值 我读到了 MobileWiFi framework 和Apple80211功能 如果我理解正确的话 它们在没有越狱的情况下无法工作 我不想在 App Store 上发布我
  • 使用 lighttpd 重写 - 如何删除文件扩展名

    我想使用lighttpd的mod rewrite来允许没有特定文件扩展名的请求 例如 我希望以下映射自动工作 请求 index 将提供 index php dir file gt dir file php dir file args gt
  • 如何堆叠与前一个矩形高度相应的矩形?

    我尝试制作一个简单的列视觉效果 其中矩形的高度由比例决定 var heightScale d3 scaleLinear domain 150 2500 range 10 80 我的代码是这样的 var margins top 100 lef
  • Tkinter 中的多个窗口?

    我是编程新手 很难找到教如何创建使用多个窗口的 GUI 的教程 例如 如果用户单击 查找 按钮 则会弹出一个包含搜索结果的窗口 我该如何实现这个目标 这在 Tkinter 中可能吗 任何对来源的建议 参考将不胜感激 谢谢 要创建您的第一个窗
  • 使用JQuery跨域获取Xml数据

    有没有办法用JQuery 客户端 跨域加载XML数据 get http otherdomain com data xml function xml 上面的方法不起作用 我是否必须依赖 JSONP 或者有没有办法加载 XML 无法加载 XML
  • 如何在 JFrame 中使用 setVisible?

    在我的程序中我有两个JFrame实例 当我点击next按钮我想显示下一帧并隐藏当前帧 所以我用this setVisible false 和新的Next setVisible true 但在Next如果我点击窗口back按钮我想将上一帧设置
  • 使用 AJAX、PHP 和 jQuery 上传多个图像

    我在使用 AJAX 上传多个图像时遇到很多问题 我写这段代码 HTML
  • ASP.Net Core 应用程序可以在 Visual Studio 中运行,但不能与 dotnet run 一起运行

    我有一个 asp net core 应用程序 我开始通过 Visual Studio 构建它 通常当我按 F5 或按 Visual Studio 中的调试按钮时它工作正常 However if I try to use dotnet run
  • 将单元格超链接到其自身的宏

    我已经创建了一个宏 允许我双击超链接 它会根据我单击的单元格显示另一张工作表中的信息 现在我想自动化超链接过程 我需要一个宏 它将获取名称列表并将所有这些单元格超链接到自身 到目前为止 我有一个宏 它超链接激活的单元格 但返回值 0 但已超
  • 仅单击按钮即可添加记录

    我有一个 数据输入 属性设置为 是 的表单 它绑定到一个表 当我开始填写表格时 它会自动保存 我不希望这种情况发生 我只想在按下按钮时将表单保存到表格中 有什么简单的方法可以做到这一点吗 不含 VBA 如果我只能用 vba 做到这一点 请告
  • 去掉 UINavigationBar 右侧的空间

    所以 这就是我想要实现的目标 It s a UINavigationBar with a UIBarButtonItem使用自定义初始化UIButton 基本上是这样的 UIButton favoriteButton UIButton bu
  • 将新版本的 Android 应用程序发布到 google play admob 后,状态更改为非活动且不显示广告

    Admob 在我的应用程序上展示广告 一切正常 然后我创建了该应用程序的新版本 将其上传到 Google Play 广告就停止出现了 在 AdMob 中 该应用程序的状态更改为 非活动 AdMob 从未收到您网站的广告请求 气泡从绿色变为红
  • vba下载并保存在C:\user中[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我想要使 用 VBA 的 excel 从互联网下载文件 该文件是一个包含有关员工列表信息
  • 将 Servlet 3.0 与 Weblogic 10.3 结合使用

    我正在研究基于表单的身份验证并使用以下语句 我已经意识到Servlet 3 0自带的HttpServletRequest gt login方法的实现方式 在stackoverflow用户的帮助下 HttpServletRequest req
  • 无法在 Android 2.3.x 或更低版本上使用 Movie 解码某些动画 GIF 文件

    我尝试使用以下代码片段来解码带有 Movie 类的动画 gif 文件 URL url InputStream is null BufferedInputStream bis null url new URL http emos plurk
  • 如何为Python 2.7重新安装GDAL库?

    我正在尝试安装适用于 Python 2 7 的 GDAL 库 并且我遵循了不同的可用说明 例如 http pythongisandstuff wordpress com 2011 07 07 installing gdal and ogr
  • 如何在没有端口映射的情况下将docker容器的ip和端口暴露给外部docker主机?

    当我在一台 docker 主机上为同一个 Web 映像启动两个 docker 容器时 两个docker容器监听同一个端口5000 port 5000两个容器的映射到docker主机的不同端口 49155 49156 要从外部 docker
  • Laravel 5.4 事件广播不适用于 vuejs

    我想用 laravel 5 4 vuejs 和带有 Echo 的 Pusher api 创建聊天 我做了两次与 Pusher 沟通 但我没有回调和我的 vue js 文件 如果有帮助的话 我在当地与 MAPM 合作 我已经安装了 compo
  • Java Swing 重/慢的paintComponent - 有什么建议吗?

    我正在制作一个基于滚动 2D 地图 图块的游戏 每个图块 存储为tile 21 11 每张地图总共 231 个图块 最多可以包含 21 个值 存储为 int 3 7 当全屏显示时 我会同时看到大约 8 张地图 平均而言 每张地图的绘制时间约