`

使用HTML5中的canvas进行图形图像.游戏.动画开发时,不需要双缓冲机制.

阅读更多
在开发 图像 动画 游戏 相关的程序时, 双缓冲( double-buffer )一直是程序员常用(必用)的技巧.
当然 随着各种引擎 框架的发展,以及计算机语言本身的进步 开发人员已经不需要在亲自去实现了(其实 这个实现起来也不复杂)


HTML5中的canvas 为我们使用js在浏览器中进行图形图像以及动画游戏的开发提供了基础保障, 但是它并没有高级到会自动的实现双缓冲, 不过不用担心, 因为它根本不需要双缓冲.

双缓冲最初的本意 是为了减少可见屏幕(画布)的刷新次数 避免画面闪烁.

在传统语言中 如果不使用双缓冲,执行下面的操作:

1 在可见画布上画出一个圆  //系统自动刷新并渲染可见画布
2 在可见画布上画出一个三角 //系统自动刷新并渲染可见画布
3 在可见画布上画出一个方块 //系统自动刷新并渲染可见画布

那么每一步之后 显示系统都会刷新一次"可见画布", 也就是说在短短的时间里 会刷新多次画布.

使用双缓存之后(多了一个非可见画布,也就是那个缓冲):

1 在非可见画布上画出一个圆
2 在非可见画布上画出一个三角
3 在非可见画布上画出一个方块
4 将非可见画布上的内容一次性画到可见画布上

使用双缓冲后 虽然绘画次数多了一次, 但是 实际上可见画布的刷新次数变少了 可以有效的降低画面闪烁的现象.


而在浏览器中使用canvas时, 没必要使用双缓冲, 因为系统不会在每次绘图之后都立即刷新canvas.

举个例子 伪代码.

function a(){
  for (var i=0;i<10;i++){
    // 在canvas上画一些东西
  }
}

当执行函数a时, 虽然对canvas执行了10次的绘图操作,但是并不会刷新和渲染可见画布,而只有当函数执行完成后 才会一次性的刷新并渲染出canvas上的东西.
(当然 如果你使用了setTimeout那就另当别论了)

网上有一些人用canvas写的游戏 自己实现了一套双缓冲机制, 其实完全多余的,对性能不仅没有提高 还会有一定的降低.

=================================

以上结论只针对 2010年3月23日之前的 canvas和js,  以后如果js 浏览器 canvas有什么变化 我不敢保证.

不过 即使以后js支持多线程了 支持更多NB特性了, 那么我觉得这个双缓冲也是多余的.
这个本来就应该是机器底层 操作系统甚至是硬件级别支持的, 顶层编码人员原本就不应该去关注所谓的双缓冲.

=================================

最近正在用 js 和 html5 开发一些东西,
感慨一下 Chrome之威武!
同时 在今天这样一个值得纪念的日子里
更要感慨一下Chrome的所有者之伟大!













4
1
分享到:
评论
3 楼 fins 2013-03-29  
honghe 写道
话不能这么说,我现在就需要缓冲绘图,因为canvas重绘的时候需要全部重绘,我绘制的背景图像很耗时,那么就需要存储为一个图片,然后执行其他操作的重绘图像时候绘制这个图片就可以了。


你说的这种和我说的双缓冲不是一个意思.  你这个相当于 cache , 而不是 buffer.
2 楼 honghe 2013-03-13  
话不能这么说,我现在就需要缓冲绘图,因为canvas重绘的时候需要全部重绘,我绘制的背景图像很耗时,那么就需要存储为一个图片,然后执行其他操作的重绘图像时候绘制这个图片就可以了。
1 楼 glee_java 2010-11-11  
收藏...学习了,
正想学习HTML5的东西,希望可以向你学更多东西...谢谢

相关推荐

    网页中基于HTML5,canvas的动画实现.docx

    一种常见的优化方法是采用双缓冲技术,即先在一个“后台”Canvas中绘制完整的帧,然后再将其绘制到用户可见的“前台”Canvas中,这样可以减少闪烁现象。 #### 结论 HTML5 Canvas提供了一种强大的方式来创建动态内容...

    基于html5 canvas实现聚宝盆接金币游戏特效源码.zip

    8. **性能优化**:为了保证游戏流畅,可能需要考虑减少不必要的重绘,利用`clearRect()`清除旧的画面,或者使用双缓冲技术来减少闪烁。 9. **使用须知.txt**:这个文件可能包含了如何运行和理解源代码的说明,包括...

    delphi使用双缓冲和不使用双缓冲对比

    不使用双缓冲时,每一次绘图操作都会立即反映在屏幕上,如果操作频繁,可能导致屏幕闪烁,特别是在绘制复杂的图形或者执行动画时。这种现象在低刷新率或者大量图形更新时尤为明显。描述中提到的“极端情况”可能就是...

    html5-canvas-瀑布特效.zip

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,创造出丰富的视觉效果。在这个“html5-canvas-瀑布特效.zip”压缩包中,包含了一个使用HTML5 Canvas技术实现的逼真流动瀑布动画特效...

    jqueryhtml5 canvas翻滚熔岩动画背景特效

    在IT行业中,jQuery、HTML5和Canvas是网页开发中的关键技术,它们共同为现代网页带来了丰富的交互性和视觉效果。在本实例中,我们将探讨如何利用这些技术实现一个"jqueryhtml5 canvas翻滚熔岩动画背景特效"。 首先...

    使用双缓冲绘画.rar .

    在计算机图形学中,双缓冲技术是一种优化图形绘制性能并减少屏幕闪烁的策略,尤其在进行复杂的图形更新时。在Windows编程或者Java图形用户界面(GUI)开发中,双缓冲是一种常见的实践。本文将深入探讨双缓冲绘画的...

    HTML5-2D游戏开发

    HTML5-2D游戏开发是一项利用HTML5标准中的一些技术进行二维游戏制作的技术,它允许开发者利用浏览器标准中的Canvas API和JavaScript等技术来制作图形化和动画效果的游戏。本文将详细探讨HTML5游戏开发的基础知识,...

    BCB简单动画(采用的是双缓冲绘图)

    在计算机图形学中,动画的实现是一项关键技术,而在BCB(Borland C++ Builder)环境中,采用双缓冲绘图技术可以显著提升动画效果,减少闪烁,提供更加流畅的视觉体验。本篇文章将深入探讨BCB中的双缓冲绘图原理及其...

    双缓冲区绘制线条,避免绘图闪烁

    在实现双缓冲绘图时,通常会用到图形库或者API,如OpenGL、DirectX、Java的AWT或Swing,或者Web开发中的HTML5 Canvas。这些库提供了支持双缓冲的接口和函数,开发者可以通过它们来创建和管理后台缓冲区,进行绘图...

    基于HTML5 canvas的简单抽奖轮盘特效代码.zip

    HTML5的canvas元素是Web开发中的一个强大工具,它提供了在网页上绘制图形的能力,而无需依赖外部插件。这个“基于HTML5 canvas的简单抽奖轮盘特效代码”压缩包显然是一个前端项目,用于实现一个互动式的抽奖转盘效果...

    使用J2ME开发的简单图形动画

    在J2ME中,图形动画涉及使用低级别的图形API,如MIDP(Mobile Information Device Profile)中的Canvas类,来创建和更新屏幕上的图像,使它们呈现出动态效果。这可能包括物体的移动、旋转、缩放等视觉效果。 **文件...

    J2ME游戏程序开发实例详解.pdf

    GameCanvas提供了双缓冲机制,防止游戏画面闪烁。 7. 声音支持: 虽然J2ME平台对声音的支持比较有限,但开发者可以使用javax.microedition.media包来控制声音播放。这包括音效和背景音乐的加载和播放。 8. 游戏...

    android SurfaceView双缓冲Demo

    在Android开发中,`SurfaceView`是一个非常重要的视图组件,尤其在处理高性能、低延迟的图形绘制场景,如游戏或者视频播放等。本`Demo`着重展示了如何使用`SurfaceView`实现双缓冲技术,以优化图形绘制性能,提高...

    HTML5 Canvas 实现超逼真的平行视差3D视觉效果源码.zip

    HTML5 Canvas 是一个强大的网页图形库,它允许开发者在网页上动态绘制图形,甚至实现复杂的交互式动画。在这个"HTML5 Canvas 实现超逼真的平行视差3D视觉效果源码.zip"压缩包中,我们可以预见到一个使用Canvas API...

    HTML5 canvas实现超逼真的图片水纹涟漪特效源码.zip

    这个源码示例对于学习HTML5 canvas图形编程和动画处理非常有帮助,可以深入理解如何使用JavaScript操控canvas元素创建复杂的动态效果。它还涉及到事件监听、时间和空间的同步计算,以及对用户交互的响应,这些都是...

    安卓手绘图片处理画板相关-DrawPanel双缓冲实现画板.rar

    在安卓的View系统中,画布(Canvas)是用于绘制图形的接口,而双缓冲就是通过创建一个后台缓冲区来完成绘图操作,然后一次性将后台缓冲区的内容复制到前台显示,这样可以减少屏幕刷新时的闪烁现象,提供平滑的动画...

    HTML5 Canvas图片倒影波纹动画特效特效代码

    可以使用双缓冲技术,即在内存中创建一个隐藏的Canvas,先在此Canvas上进行所有绘制,然后一次性将结果绘制到可见Canvas上,减少屏幕闪烁。 在这个特效中,提供的"HTML5 Canvas图片倒影波纹动画特效"代码可能包含了...

    双缓冲绘图技术做的移动小车

    双缓冲绘图是一种在计算机图形学中用于减少屏幕闪烁和图像撕裂的技术,尤其在游戏开发和动画制作中广泛应用。这种技术通过在内存中创建一个临时的“后台”缓冲区来绘制图形,然后再一次性将整个缓冲区的内容显示到...

    doubleCache

    在Android开发中,双缓冲是一种优化图形绘制性能的技术,它主要应用于复杂的图形更新场景,比如游戏、动画或者数据可视化应用。双缓冲的核心思想是利用内存中的临时存储来提高画面渲染的效率,避免频繁的屏幕刷新...

Global site tag (gtag.js) - Google Analytics