如何优化画布上的动画? HTML 5

2024-03-01

我面临着一个问题,随着各种图片向左、向右、向上和向下移动,画布上的动画速度会减慢。我需要有关如何优化动画的建议。

重要的是动画适用于所有主要浏览器,特别是:Chrome、Firefox 和 Internet Explorer。

动画可以优化吗?也许推迟绘图?先感谢您。


在 JavaScript 中,您可以使用 setInterval 和 setTimeout 函数来创建延迟并限制帧速率。

例如,如果您想让绘图循环大约为 30 FPS,您可以使用如下所示的代码:

function draw(){

        var canvas = document.getElementById('myCanvas');
        //create the image object
        var img = new Image();
        //set the image object's image file path
        var img.src = "images/myImage.png"
        //check to see that our canvas exists 
        if( canvas.getContext )
        {
            //grab the context to draw to.
            var ctx = cvs.getContext('2d');
            //clear the screen to a white background first
            //NOTE to make this faster you can clear just the parts
            //of the canvas that are moving instead of the whole thing
            //every time. Check out 'Improving HTML5 Canvas Performance'
                    //link mention in other post
            ctx.fillStyle="rgb(255,255,255)";
            ctx.fillRect (0, 0,512, 512);

            //DO ALL YOUR DRAWING HERE....

            //draw animation
            ctx.drawImage(img, 0, 0);
        }
        //Recalls this draw update 30 times per second
        setTimeout(draw,1000/30);
}

这将帮助您控制动画所花费的处理时间。因此,如果您发现动画速度太慢,您可以通过将分母“30”更改为“60”fps 或任何真正适合您的程序的值来提高帧速率。

就优化而言,除了 setTimeout() 之外,绘制动画的方式也很重要。尝试在渲染之前加载所有图像,这称为“预加载”。也就是说,如果每个动画单元都有一堆不同的图像,那么在调用绘制函数之前,将所有图像加载到图像数组中,如下所示:

var loadedImages = new Array();
loadedImages[0] = new Image();
loadedImages[0].src = "images/animationFrame1.png";
loadedImages[1] = new Image();
loadedImages[1].src = "images/animationFrame2.png";
loadedImages[2] = new Image();
loadedImages[2].src = "images/animationFrame3.png";
loadedImages[3] = new Image();
loadedImages[3].src = "images/animationFrame4.png";

如果对您的应用程序有意义,您甚至可以将它们放入哈希中,而不是

loadedImages[0] = new Image();
loadedImages[0].src = "images/animationFrame1.png";

你做这个

loadedImages['frame1'] = new Image();
loadedImages['frame1'].src = "images/animationFrame1.png";

一旦加载了所有图像,您就可以通过像这样调用它们来引用它们进行绘制:

//Using the integer array
ctx.drawImage(loadedImages[0], 0, 0);
//OR
//Using the stringed hash 
ctx.drawImage(loadedImages['frame1'], 0, 0);

您希望将加载过程与渲染过程分开,因为加载图像是过程密集型的,因此如果您在渲染时加载内容,则会减慢动画速度。

这并不是说您在渲染时无法加载任何内容,而是要良心地认为这会减慢动画速度。

Here http://www.techrepublic.com/article/preloading-and-the-javascript-image-object/5214317是一篇关于预加载图像的文章。

这里还有另一篇文章讨论了所有浏览器上一致的动画速度here https://stackoverflow.com/questions/3136644/how-do-i-make-a-javascript-animation-play-at-the-same-speed-on-all-browsers-on-al/3140559#3140559

请注意link http://gafferongames.com/game-physics/fix-your-timestep/由绿色勾选答案发布

其他需要注意的事情是确保仅清除和重绘边界框,如 HTML 5 画布优化帖子中提到的。该链接有一些非常好的技术,在开发画布动画时需要注意。

Here http://www.admixweb.com/2010/01/07/17-javascript-animation-frameworks-worth-to-seing/还有一些框架工作可能会派上用场,可以将您正在做的事情与其他引擎正在做的事情进行交叉比较。

希望有些帮助。我对 javascript 很陌生(大约两周前才开始用它编码),所以可能有更好的方法来做事情,但这些是我迄今为止发现的东西。

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

如何优化画布上的动画? HTML 5 的相关文章

  • 如何将 Ajax.BeginForm MVC 助手与 JSON 结果一起使用?

    我正在尝试使用 ASP NET MVC Ajax BeginForm 帮助程序 但不想在调用完成时使用现有的内容插入选项 相反 我想使用自定义 JavaScript 函数作为回调 这可行 但我想要的结果应该以 JSON 形式返回 不幸的是
  • 将时间戳转换为一个数组

    在应用程序脚本 谷歌表中运行 我从 API 获取时间戳并返回此结果 1 6370611672429312E18 1 63706107263277082E18 我执行此代码并且工作正常 但问题不在数组中 我每次都需要它在数组中 const t
  • 更新存储在 chrome 扩展本地存储中的对象

    我正在开发一个 chrome 扩展 我将存储服务器发送的对象 例如 我将收到 命令 id 1 类型 A 大小 B 优先级 C 如果我有一个数据库 我会将其作为表中的一行插入commands 使用 chrome storage 我将这些对象的
  • Bootstrap 响应式表格在 iOS 设备上无法垂直滚动

    这就是我所拥有的 div class table responsive table class table style background transparent table div 我正在使用以下 bootstrap css 文件 ht
  • EmberJS:对象作为查询参数来刷新模型

    我遵循了查询参数指南 http guides emberjs com v1 11 0 routing query params http guides emberjs com v1 11 0 routing query params 而且效
  • 正则表达式中连字符的这种用法有效吗?

    NB I only想知道它是否是正则表达式定义中未转义连字符的有效应用 它是not关于匹配电子邮件 连字符或反斜杠的含义 量词或其他任何内容的问题 另外 请注意 链接的答案并没有真正讨论转义 未转义连字符之间的有效性问题 通常我会像这样声明
  • 通过 JavaScript 单击按钮/页面提交

    我想了解 asp net 框架如何知道何时单击了按钮 因此一旦收到请求 就会在服务器上触发其单击事件 我需要了解它是如何工作的 因为我想从 JavaScript 触发按钮的服务器单击事件 我能够从 JavaScript 执行页面提交 doc
  • Bootstrap 4 移动导航栏消失

    我刚刚从 Bootstrap 3 转换为 Bootstrap 4 但我的移动导航栏出现问题 使用切换按钮展开导航栏时 导航消失 我不明白为什么会发生这种情况 导航栏下方有一个大屏幕 但整个移动导航向上移动 如下面的 gif 所示 以下是导航
  • Firefox Addon 中的 JQuery 导致多个警告

    我在 Firefox 插件中使用 jquery 但我不断收到大量警告消息 如下所示 anonymous function does not always return a value System JS WARNING resource g
  • 如何知道 .keyup() 是否是字符键(jQuery)

    如何知道 keyup 是否是字符键 jQuery input keyup function if key is a character such as a b A b c 5 3 2 etc not enter key or shift o
  • 如何从 html 页面 [javascript] 调用 Web 服务方法而不刷新页面

    我有一个webservice这将返回一个值 我的要求是 我需要调用它webservice从一个index html页面 该页面有一个 html 提交按钮 在该按钮上单击我正在呼叫JavaScript 从那里我想调用网络方法 我怎样才能做到这
  • 如何更改 HTML 文档的“实际编码”?

    我通过 W3C HTML 验证器运行我的网页并收到此错误 编码ascii不是字符的首选名称 使用中的编码 首选名称是 us ascii Charmod C024 第 5 行 第 70 列 内部编码声明 utf 8 不同意 文档的实际编码 u
  • 如何将MathJax公式转换为img

    Mathjax 现在在我的项目中运行良好 但有一个问题 有没有办法将MathJax的公式 纯html和css 转换成img文件 我可以保存 MathJax 可以配置为生成 SVG 看http docs mathjax org en late
  • 使用 matplotlib.animation 从 CSV 文件实时绘图 - 数据绘制到第一个输入错误

    我正在尝试绘制来自不断写入 CSV 文件的传感器的数据 虽然成功创建实时绘图 但每个新数据条目都会创建一条延伸到第一个数据条目的附加线 见下文 Python 3 4 脚本 import matplotlib pyplot as plt im
  • vuejs中如何获取组件编译后的html内容

    我有一个这样的组件
  • 如何在 TypeScript 中使用 navigation.replace ?

    我试图在我的代码中使用它 const navigation useNavigation navigation replace AllFriends 但我不断收到错误消息 Property replace does not exist on
  • jQuery Mobile + Admob:轮换?

    我使用 jQuery Mobile 框架创建了一个移动应用程序 所有页面都在index php中加载 使用 div 在每个页面的页脚中 我添加了Admob代码 div div div
  • 为什么 JavaScript 中是 [1,2] + [3,4] = "1,23,4" ?

    我想将一个数组的元素添加到另一个数组中 所以我尝试了以下方法 1 2 3 4 它的回应是 1 23 4 到底是怎么回事 The 操作员没有为数组定义 发生的事情是 JavaScript将数组转换为字符串并将它们连接起来 Update 由于这
  • 将引导程序弹出框保留在视口内

    我正在尝试使用带有按钮的侧边栏创建一个菜单 每个按钮都有一个指定的包含相关数据的弹出窗口 不幸的是 其中一个弹出窗口可能包含任意数量的行 并且在某些情况下它可能部分位于视口之外 See http jsfiddle net bfd9f 1 h
  • JavaScript 阶乘防止无穷大

    我一直在 JavaScript 中使用这个函数来计算阶乘数 var f function factorial n if n 0 n 1 return 1 if f n gt 0 return f n return f n factorial

随机推荐

  • CSS3 动画图像的比例

    我尝试像灯箱一样缩放图像 运行时图像的大小发生变化但没有动画 div class img rectangular div class DNNModuleContent ModDNNHTMLC div class Normal img alt
  • 访问 CODEIGNITER 中被认为已禁用的功能时出现问题

    我意识到我的申请中有一个非常重要的问题 这是关于雇用功能的 即使申请人已经被雇用 如果客户点击提案页面上的拒绝按钮 状态也会从 已批准 更改为 已拒绝 我想我应该改变这部分的一些东西 public function approve job
  • 使用 SOAP Web 服务而不依赖 app.config

    我正在构建一个将调用外部 Web 服务的 NET 组件 我使用 添加服务引用 对话框将 Web 服务添加到我的组件中 该组件生成使用该服务所需的代码并将设置添加到 app config 文件中 我通过从控制台应用程序添加对其 DLL 的引用
  • 从 Tap 获取 UILabel 中字符的索引

    我想获取 UILabel 上点击的字符的索引 我已经对 UILabel 进行了子类化 在我的 awakeFromNib 中我有这个 layoutManager NSLayoutManager textStorage NSTextStorag
  • LINQ to Objects .Distinct() 不拉出不同的对象

    我有两种模糊搜索客户的方法 一种是缩写名称 另一种是客户的全名 当我获取这两个结果集然后将它们合并在一起 我已经阅读了几个地方应该删除不同的值 时 我得到了重复项 认为我需要做的就是打电话给 Distinct 方法 我也仍然得到重复 我是否
  • 在pentaho中..如何传递包含作业中所有连接参数定义的文本文件?

    我正在使用 jdbc 连接 并使用示例 sample db connection 传递参数 并且该参数已在服务器中的文本文件中定义为sample db connection localhost 并且我想在作业步骤中传递文本文件 以便每当作业
  • 发送和接收 SOAP 消息

    我正在用 C 编写一个 Web 服务客户端 不想创建和序列化 反序列化对象 而是发送和接收原始 XML 这在 C 中可能吗 这是我刚刚根据 John M Gant 的示例运行的实现的一部分 设置内容类型请求标头非常重要 再加上我的请求需要凭
  • 使用 SSL 和客户端证书身份验证保护 ASP.NET MVC 应用程序

    我希望通过 SSL 和客户端证书身份验证来保护 ASP NET MVC 应用程序的安全 我使用的是 IIS 7 5 Windows Server 2008 R2 我想知道是否可以通过 Web config 执行以下操作 必须通过那里 所有请
  • 如何创建链接标签云[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要生成一个文本链接云 类似于所附的图像 由于有些文字是垂直的 我正在考虑通过 CSS3 来实现 但这会消耗大量时间 你知道有什么网
  • 使用 OpenCV 打开并读取 avi 文件 - Ubuntu

    我刚刚在 R Laganiere 的 OpenCV 2 计算机视觉应用编程手册 一书中读到了这一点 需要注意的是 为了打开指定的视频 文件 您的计算机必须安装相应的编解码器 否则 cv VideoCapture 将无法理解输入 文件 通常
  • 如何使用 angular_devise 保留全局当前用户直到注销?

    如何创建自己的全局可访问的服务 该服务将通过以下方式调用服务器currentUser 仅在页面加载时一次 如果用户已登录 则保留它并向控制器或状态提供数据 直到注销 现在我在许多状态或控制器中多次解析currentUser 我在文档中找到
  • 如何检测用户何时使用模拟位置 Chrome 浏览器[重复]

    这个问题在这里已经有答案了 有没有办法检测用户何时在 Chrome 浏览器 移动和桌面 中模拟他的位置 尝试过谷歌搜索 但我只看到如何实际模拟以及如何在本机移动应用程序中检测 参考这个问题 https stackoverflow com q
  • Execvp 不会对未知命令返回错误

    我有以下代码 用于分叉子级并执行命令 a 这是一个未知命令 但是 execvp 不会返回错误 而是打印 成功 当文件 a 不存在时 如果我执行 mv a b 也会发生同样的事情 我应该如何捕获并处理这些错误 int main int arg
  • java.lang.ClassCastException:android.app.ContextImpl

    我正在尝试将 ScoreNinja 融入我的小游戏中 http scoreninja appspot com http scoreninja appspot com 但是 每次都会抛出运行时异常 05 24 23 22 59 888 ERR
  • Angularjs 1.X 相当于 Angular 2 HostBinding 和 HostListener

    我目前正在将一些 ng 1 X 元素指令迁移到 1 5 组件 格式 我的指令都处于 replace true 模式 其中很多指令的根元素上都有诸如 ng class 或 ng click 之类的内容 使用新的 component 格式 re
  • 如何在不依赖 JAX-RS 实现的情况下捕获 404 (NotFoundException)?

    通常一个用途ExceptionMapper捕获异常 记录它们 返回自定义的错误消息 然而 虽然 JAX RS 提供了NotFoundException在其 api 中 实现 Jeresy CXF 提供了自己的 NotFoundExcepti
  • 为开发环境分配域名localhost

    我正在构建一个网站 并且不想将网站从指向重新配置为http 127 0 0 1 to http www example com 此外 我使用的证书当然是用正确的域名制作的www example com但我的测试环境会调用127 0 0 1这
  • Apple Web Clip(Apple Touch 图标)不适用于采用 HTTPS 的网站

    当我为网站启用 HTTPS 时 我很难在 Safari 中的 添加书签 功能中显示 Apple Touch 图标 我可以使用 添加到主页 选项来使其工作 所以我不确定是否对 添加书签 进行了不同的调用 我已经按照苹果文档 https dev
  • 无法在应用程序中使用表情符号:拒绝提交到AppStore

    有谁知道是否所有表情符号都是苹果公司的财产 我试图在我的应用程序中使用其中的很多 大约 80 个 作为文本 但应用程序被拒绝 我问是否有一个我不能使用的表情符号列表 但没有得到答案 如果你已经被 AppStore 提交过程拒绝 你就会知道它
  • 如何优化画布上的动画? HTML 5

    我面临着一个问题 随着各种图片向左 向右 向上和向下移动 画布上的动画速度会减慢 我需要有关如何优化动画的建议 重要的是动画适用于所有主要浏览器 特别是 Chrome Firefox 和 Internet Explorer 动画可以优化吗