`
CshBBrain
  • 浏览: 651312 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
B7d9bf34-126e-301f-819e-81f2615b5a2a
开源WebSocket服务...
浏览量:145223
Group-logo
HTML5移动开发
浏览量:138089
社区版块
存档分类
最新评论

HTML5 Canvas双缓存实例

 
阅读更多

转自:http://www.108js.com/article/article3/30046.html?id=255

 

下面是用HTML5的<canvas>标签写的一个视差滚动动画的示例。采用了制作动画或者游戏编程中常用的双缓冲技术:获取到页面中的Canvas对象之后,创建了一个与页面Canvas同样大小的Canvas对象。绘图时先将图像绘制到缓冲Canvas中,等到每一桢的图像绘制完全后在把整个缓冲Canvas绘制到页面Canvas中。前景、中景、远景的视差通过控制移动速度来实现。整个动画的绘制部分只使用了Context对象的drawImage()方法。


<html>
<body>
  <canvas id="canvas" width="600" height="400"> 
   <p>Your browser does not support the canvas element</p> 
  </canvas> 
</body>
<script>

const FPS = 30;  
 const SECONDS_BETWEEN_FRAMES = 1 / FPS;  
  
 var bg0 = new Image();  
 var bg1 = new Image();  
 var bg2 = new Image();  
  
 var x = 0;  
 const RATE = 50 * SECONDS_BETWEEN_FRAMES;  
 const WIDTH = 600;  
 const HEIGHT = 320;  
  
 var canvas;  
 var canvasBuffer;  
 var context;  
 var contextBuffer;  
  
 window.onload = init;  
  
 function init() {  
    bg0.src = "b0.png";  
    bg1.src = "b1.png";  
    bg2.src = "b2.png";  
      
    canvas = document.getElementById("canvas");  
    canvasBuffer = document.createElement("canvas");  
    canvasBuffer.width = canvas.width;  
    canvasBuffer.height = canvas.height;  
    context = canvas.getContext("2d");  
    contextBuffer = canvasBuffer.getContext("2d");  
    context.clearRect(0, 0, canvas.width, canvas.height)  
    contextBuffer.clearRect(0, 0, canvasBuffer.width, canvasBuffer.height);  
      
    setInterval(animation, SECONDS_BETWEEN_FRAMES);  
}  
  
function animation() {  
    x += RATE;  
      
    context.clearRect(0, 0, canvas.width, canvas.height)  
    contextBuffer.clearRect(0, 0, canvasBuffer.width, canvasBuffer.height);  
      
    drawBuffer(bg0, 0, 0, 0.5);  
    drawBuffer(bg1, 0, 100, 0.75);  
    drawBuffer(bg2, 0, 100, 1);  
    context.drawImage(canvasBuffer, 0, 0);  
}  
  
function drawBuffer(image, dx, dy, factor) {  
    var left = (x * factor) % image.width;  
    if (left + WIDTH >= image.width) {  
        var d0 = image.width - left;  
        var d1 = WIDTH - d0;  
        contextBuffer.drawImage(image, left, 0, d0, HEIGHT, dx, dy, d0, HEIGHT);  
        contextBuffer.drawImage(image, 0, 0, d1, HEIGHT, dx + d0, dy, d1, HEIGHT);  
    }  
    else {  
        contextBuffer.drawImage(image, left, 0, WIDTH, HEIGHT, dx, dy, WIDTH, HEIGHT);  
    }  
}  

</script>
</html>
  顺带一提的是在Canvas画布中绘制图形,一般情况下后绘制的会覆盖先绘制的,所以在绘制图像的时候需要先绘制远景b0,再绘制中景b1,最后绘制近景b2。

分享到:
评论

相关推荐

    H5 的canvas小游戏实例

    HTML5的Canvas小游戏实例,尤其是基于拼图游戏的开发,是Web前端开发中一个有趣的实践项目,它结合了HTML5、Canvas、JavaScript以及CSS等多种技术。在这个游戏中,玩家需要通过移动图片碎片来完成完整的图像,这既...

    HTML5 Canvas游戏开发实战(实例源代码)

    通过本书的实例代码,开发者不仅可以学习到HTML5 Canvas的基本操作,还能掌握游戏开发的流程和技巧,从零开始构建自己的游戏项目。实践过程中,对前端性能优化、用户体验设计和跨平台兼容性的理解也会得到提升。因此...

    html5 canvas 制作流程图 EaselJS

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上直接绘制图形,从而创建出丰富的交互式用户体验。EaselJS是基于HTML5 Canvas的一个JavaScript库,它为Canvas提供了一个更加高级、易于使用的API,使得...

    HTML5 Canvas游戏开发实战

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,为创建丰富的交互式游戏和应用程序提供了可能。在这个“HTML5 Canvas游戏开发实战”中,我们将会深入探讨如何利用Canvas API来构建...

    HTML5 Canvas 2D竖版飞行射击游戏实例

    HTML5 Canvas 2D竖版飞行射击游戏实例是利用HTML5的新特性——Canvas元素和JavaScript进行游戏开发的一个经典案例。Canvas作为一个强大的图形绘制接口,允许开发者通过编程方式动态地在网页上绘制图形,从而实现丰富...

    HTML5 Canvas Cookbook (英文原版)

    《HTML5 Canvas Cookbook》这本书通过实例讲解,不仅适合初学者快速入门,也为有经验的开发者提供了许多实用的解决方案和灵感,是一本值得深入研究的HTML5 Canvas参考资料。通过阅读和实践书中的示例,读者将能够...

    HTML 5 CANVAS游戏开发实战_高清完整版

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,为创建丰富的交互式游戏和应用程序提供了可能。在这个“HTML 5 CANVAS游戏开发实战_高清完整版”中,我们将深入探讨如何利用Canvas ...

    html5 canvas几何模型3D运动动画效果

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,创造出丰富的视觉体验。在这个“html5 canvas几何模型3D运动动画效果”项目中,我们将探讨如何利用HTML5 Canvas API构建一个...

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

    在本实例中,我们将探讨如何利用这些技术实现一个"jqueryhtml5 canvas翻滚熔岩动画背景特效"。 首先,jQuery是一个流行的JavaScript库,它简化了DOM操作、事件处理和AJAX交互等任务。在创建动态背景特效时,jQuery...

    HTML5 Canvas 开发详解(第2版).zip

    在HTML5 Canvas开发详解(第2版)这本书中,这些知识点将通过实例和实践案例进行深入讲解,旨在帮助开发者从基础到进阶,全面掌握Canvas的使用,为创建引人入胜的Web图形和交互体验打下坚实基础。

    HTML 5 CANVAS游戏开发实战+源代码

    "HTML 5 CANVAS游戏开发实战"这本书深入探讨了如何利用Canvas API来构建游戏,通过实例帮助读者掌握这一技术。 1. Canvas API基础: HTML5 Canvas的核心是一个二维绘图上下文,通过JavaScript调用其提供的方法进行...

    HTML5_Canvas开发详解(第2版)

    HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,创造出丰富的交互式用户体验。《HTML5_Canvas开发详解(第2版)》这本书深入探讨了Canvas API的各个方面,旨在帮助读者掌握这个技术...

    好搜 html canvas动态背景css3 实例

    这个实例“好搜 html canvas动态背景css3”展示了如何结合使用这些技术来创建一个动态的网页背景效果。 HTML(HyperText Markup Language)是网页内容的基础结构语言,用于定义网页的各个元素,如标题、段落、图片...

    《HTML5 Canvas核心技术图形动画与游戏开发》高清中文 + 源码

    HTML5 Canvas是现代Web开发中的一个关键特性,它允许开发者在网页上绘制2D图形,创建复杂的动画效果以及构建互动式游戏。这本书《HTML5 Canvas核心技术图形动画与游戏开发》全面探讨了Canvas API的各个方面,旨在...

    html5 canvas雪花动画特效.zip

    通过这个实例,你可以深入理解HTML5 Canvas的绘图机制,以及如何使用JavaScript实现动态效果,这对于提升网页交互性和用户体验非常有帮助。在实际项目中,你可以根据需求调整参数,创造出更多富有创意的动画效果。

    html5网站实例

    HTML5提供了一些新的布局元素,如`&lt;figure&gt;`和`&lt;figcaption&gt;`用于图像和图例,`&lt;canvas&gt;`用于绘制图形,`&lt;video&gt;`和`&lt;audio&gt;`用于多媒体播放。同时,CSS3的Flexbox和Grid布局系统让网页布局更加灵活。 1. Flexbox:...

    HTML+5开发精要与实例详解代码清单

    本代码清单涵盖了HTML5开发的关键要点和实例,是学习和实践HTML5编程的宝贵资源。 一、HTML5的新特性 1. 结构化元素:`&lt;article&gt;`, `&lt;aside&gt;`, `&lt;footer&gt;`, `&lt;header&gt;`, `&lt;nav&gt;`, `&lt;section&gt;`等,这些元素有助于...

    CANVAS实例.rar

    在本文中,我们将深入探讨HTML5的Canvas元素及其在创建动态和交互式图形中的应用。Canvas是一个基于矢量图形的二维绘图API,允许开发者在网页上直接进行图像处理和动画制作。"CANVAS实例.rar"这个压缩包包含了11个...

    基于HTML5 Canvas实现的图表插件Chart.js实例.zip

    这个“基于HTML5 Canvas实现的图表插件Chart.js实例.zip”包含了一些关于如何使用Chart.js的示例和指南。 Chart.js的优点在于它的简洁性和易用性。开发者只需要定义数据和配置选项,Chart.js就能自动绘制出美观且...

    HTML5 canvas移动端斗地主小游戏.zip

    HTML5 canvas是现代网页开发中的一个关键特性,它允许开发者在网页上绘制矢量图形、动画,以及创建交互式内容。...这不仅提升了开发者的技术能力,也为我们提供了在实际项目中应用HTML5 canvas的一个实例。

Global site tag (gtag.js) - Google Analytics