问题标签 [doublebuffered]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
171 浏览

java - Java Canvas 放大闪烁

我正在做一个需要我能够在画布上放大和缩小的项目。我正在使用以下方法:

然后从那里修改比例变量。这行得通,除了大多数时候我会得到一个恼人的闪烁。它是三重缓冲的,所以我真的不明白如何将画布转换为合适的大小需要那么长时间......

无论如何,如果有什么我想念的,我很想知道。

这是我的 update() 方法:

提前致谢,

编辑:当我说“Canvas”时,我的意思是 java.awt.Canvas,主类的基类,很抱歉有任何混淆。

0 投票
1 回答
1648 浏览

sdl - HW_SURFACE 上的 SDL 双缓冲

我不明白为什么我的 SDL 应用程序不会按照我的要求设置 DOUBLE_BUF;

这是一个简短的代码,它在不带参数的情况下执行,以 32 BPP 模式打开一个全屏窗口 1024*768。

如您所见, args 是;--window 禁用全屏 --no-hardwarememory 设置 SDL_SWSURFACE 代替 SDL_HWSURFACE --test 调用 testModes() 函数

所以这是我的输出;

没有参数(标志是 "SDL_DOUBLEBUF | SDL_HWSURFACE | SDL_FULLSCREEN" )我明白了;

使用 --test 参数,我得到了这个:

对于那些想要编译它的人,这里是 main.h

所以我想了解为什么 DOUBLE_BUF 在 32bpp 全屏模式下不起作用.. 一些想法?

0 投票
2 回答
1561 浏览

java - Java Swing:drawLine非常慢

我正在使用 swing 编写一个 Java 应用程序,我需要在其中绘制一个正方形上方的网格。为此,我使用了类drawLine(...)提供的方法Graphics

一切正常,只是绘制每条线需要花费大量时间(50 条线超过 20 秒......)。我什至可以看到实时绘制的线条。一件奇怪的事情是水平线的绘制速度比垂直线快(几乎立即)。

我可能做错了什么。这是网格的代码。

0 投票
0 回答
575 浏览

vb.net - VB.NET 用户控件缓冲图形

我想创建一个具有缓冲图形的基本用户控件。但是有些不对劲,它停在 Using gr As Graphics = Graphics.FromImage(m_Buffer) 这一行

我什至设法使 VS2010 崩溃。这就是为什么我怀疑我引入了一些错误。我从示例代码中复制了大部分部分,我猜至少 OnPaint 从未被调用,因为它不是我可以在设计器中选择的事件之一。

非常感谢你的帮助!

结束类

0 投票
1 回答
1811 浏览

c# - 双缓冲客户绘制列表框

我有一个自定义绘制方法,所以我可以在列表框中制作不同颜色的项目。问题是我每 500 毫秒重新绘制一次列表框以检查值是否已更改。这使列表框闪烁,我不知道如何双缓冲代码。有人可以帮忙吗?

0 投票
2 回答
2453 浏览

assembly - 双缓冲,汇编 x86

好吧,我正在 Assembly x86 ( 8086 ) 上制作 Space Invaders 游戏,到目前为止运行良好。我在图形模式下使用程序集13h,这意味着 320x200 像素和 256 色。

对于绘图,我使用 sub-function 0ch,这意味着我正在逐个像素地绘制。问题是屏幕被清除得很快,并导致一些视觉故障。

我以前编写过一些游戏,解决方案可能是双缓冲绘图。如何在 Assembly x86 中实现这一点?

编辑

我正在使用 Windows 8 X64 来测试和运行我的代码 DOSBox Portable、tasm 和 tlink。

0 投票
2 回答
808 浏览

java - 窗口调整大小后重新调整组件大小

我正在编写一个 Applet 游戏,我希望 Applet 重新调整大小以填充浏览器窗口。我知道这可以用 HTML 来做,现在我只是假设我有一个小程序,它偶尔会强制改变大小。

使用 GridBagLayout,我在重新调整大小时遇到​​了很多闪烁的问题(它似乎在重绘期间清除了每个 JPanel - 我已经尝试覆盖每个 JPanel 的 update() 方法)。我决定将游戏的大小调整推迟到窗口大小调整完成之后——既是为了避免闪烁,也不必在我的游戏代码中处理许多快速和小规模的调整。

我有这方面的工作代码,我将在下面附上(虽然稍微简化了)。但是,这仅在窗口在两个方向上拉伸得更大时才有效。如果宽度或高度中的任何一个暂时缩小,游戏就会立即折叠成左上角的一个小方块。

我该如何解决这个问题,让游戏继续正常运行,但在调整大小时让图像暂时被覆盖?

为了解释我的代码,我有一个 JPanel,其中包含我的整个游戏布局,位于顶部 GridBagLayout 的 0,0 位置,没有任何重量。我在位置 1,1 有一个空标签(称为 emptySpace),每个方向的权重为 1.0:

布局

我使用以下代码使游戏窗口占据了整个空间,除了在重新调整大小期间:

0 投票
2 回答
673 浏览

java - Java中的双缓冲

我在互联网上找到了这个双缓冲代码,但没有解释。我对这段代码有点困惑。

  • 为什么使用图像“i”?如果要使用一次,它有什么用?

  • 当我们已经设置颜色时,为什么我们将更改颜色分配给前景色?

  • g.drawImage() 方法在做什么?

这是代码:

问候

0 投票
2 回答
9228 浏览

c# - 如何使图像平滑移动?

我有一个 PictureBox 图像,它随着面板上的鼠标移动而移动。

它按照我的意愿移动,但它一直在闪烁(如刷新),我了解到这是表单的问题。

我在表单的构造函数中尝试了以下代码行,但没有成功:

如果有助于查看所有图片,这是鼠标移动的事件处理程序。chipHolder 是一个面板,image 是分别从文件中导入的图像。

有任何想法吗?

0 投票
1 回答
499 浏览

c# - 在 UserControl 中渲染大画布

几天来,我一直在尝试实施此操作时遇到麻烦。关于我正在尝试做的事情,我已经广泛搜索了类似的问题,但我没有遇到直接帮助我解决问题的问题。

基本上,我在UserControl课堂上将瓷砖渲染到网格上。这是我正在开发的基于 Tile Engine 的世界编辑器。这是一个开放世界文档的屏幕截图和一些刷过的图块。

在此处输入图像描述

最初,我打算Bitmap在我的控件中使用一个作为世界预览画布的控件。例如,使用画笔工具时,当您移动鼠标并按住左键时,它会将光标下方最近的图块设置为画笔的图块,并将其绘制在位layer图上。控件的OnPaint方法被覆盖到layer相对于绘制事件的剪切矩形绘制位图的位置。

这种方法的问题是,在处理大世界时,位图会非常大。我需要这个应用程序在世界大小上具有通用性,而且很明显,每次将大型位图渲染到控件上时都会出现性能问题。

目前,我在控件的覆盖OnPaint事件中直接将图块绘制到控件上。这很棒,因为它不需要大量内存。例如,每个 tile 的(1000, 1000)世界(20, 20)(总画布大小为(20000, 20000))在整个应用程序的大约 18mb 内存中运行。虽然不是内存密集型,但它是相当密集的处理器,因为每次控件无效时,它都会遍历视口中的每个图块。这会产生非常烦人的闪烁。

我想要完成的是一种在内存使用和性能方面处于中间状态的方法。本质上是双重缓冲世界,以便在重绘控件时不会闪烁(表单调整大小、焦点和模糊、滚动等)。以 Photoshop 为例——当它溢出容器视口时,它如何渲染打开的文档?

OnPaint作为参考,这是我使用上述直接绘制方法的控件的覆盖。

getRenderBounds返回一个相对于PaintEventArgs.ClipRectangle用于渲染可见图块的矩形,而不是循环遍历世界中的所有图块并检查它是否可见。

如果您需要我的代码中的更多上下文,请发表评论。