画布渐变表现

2023-11-30

我目前正在使用画布编写一个小游戏。对于游戏,我需要某种雾来隐藏地图的大部分,并且只有玩家周围的一小部分区域应该可见。为此,我使用第二个画布覆盖游戏发生的画布,并用渐变填充它(从透明到黑色):

function drawFog(){
fogc.clearRect(0,0,700,600);
// Create gradient
var grd=fogc.createRadialGradient(player.getPosX(),player.getPosY(),0,player.getPosX(),player.getPosY(),100);
grd.addColorStop(0,"rgba(50,50,50,0)");
grd.addColorStop(1,"black");

// Fill with gradient
fogc.fillStyle=grd;
fogc.fillRect(0,0,700,600);
}

不幸的是,这会导致巨大的性能问题,因为它将为每一帧重新绘制。

我想问是否有更好的解决方案可以以更好的性能达到相同的效果。


将渐变缓存到离屏画布,然后使用 drawImage() 在画布上进行绘制:

  • 创建雾大小的离屏画布
  • 绘制渐变
  • 当需要雾时,使用屏幕外画布作为图像。

这样就消除了创建和计算梯度的处理。绘制图像基本上就是复制操作(稍微多了一点,但性能很好)。

function createFog(player) {

    // Create off-screen canvas and gradient
    var fogCanvas = document.createElement('canvas'),
        ctx = fogCanvas.getContext('2d'),
        grd = fogc.createRadialGradient(player.getPosX(),
                                        player.getPosY(),
                                        0,player.getPosX(),
                                        player.getPosY(),100);

    fogCanvas.width = 700;
    fogCanvas.height = 700;

    grd.addColorStop(0,"rgba(50,50,50,0)");
    grd.addColorStop(1,"black");

    // Fill with gradient
    ctx.fillStyle = grd;
    ctx.fillRect(0,0,700,600);

    return fogCanvas;
}

现在您可以简单地在从上述函数返回的画布上绘制,而不是每次都创建渐变:

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

画布渐变表现 的相关文章

  • 如何使用 JavaScript 获取元素的填充值?

    我有一个textarea在我的 HTML 中 我需要获取整数或浮点形式的填充数值 以像素为单位 我如何使用 JavaScript 获取它 我没有使用 jQuery 所以我正在寻找纯 JavaScript 解决方案 这将返回padding l
  • 在webview android中加载本地html文件

    我正在尝试在 android 的 webview 中加载 html 文件的内容 但是 它给了我 网页不可用错误 如果我尝试使用谷歌或雅虎等网站 它们就会起作用 html文件位于src gt main gt assests gt index
  • asp.net mvc html 属性没有值

    我正在尝试根据 HTML5 规范创建一个隐藏表单 其中隐藏属性在没有值的情况下使用 现在我不知道如何将其强制到 asp net mvc 中 上面的方法不能编译 Compiler Error Message CS0103 The name h
  • 如何设置 CSS 网格的最大高度

    我有以下 CSS 网格 grid 3x4 display grid grid template columns 1fr 1fr 1fr grid template rows 1fr 1fr 1fr 1fr grid template are
  • 应用旋转时,HTML5 canvas Clip() 在 Chrome 中不起作用

    我试图在画布上使用剪辑区域 一旦坐标系旋转任何非零值 它就会停止工作 window onload function var canvas document getElementById mainCanvas var ctx canvas g
  • 输入类型=图像 - onclick(),将触发其事件,但在 jquery 中的函数上表现不佳

    我认为这可能是两篇文章 2个问题 所以如果你对此发表评论 我会将它们分开 主要问题实际上是 我怎样才能为按钮设置图像背景 简单且正确 我想现在我可以确定这些事实了 因为我在将图像设置为按钮背景时遇到了 小 问题 我想 好吧 如果很难设置的话
  • 使用画布仅删除文本而不删除图像

    我正在尝试删除画布元素中的文本 而不丢失Background Image of the Canvas Element 我想我需要保存Imagesrc并把它还给Canvas Element之后clearRect 但我不知道该怎么做 我希望有人
  • 如何在文本区域中使用除“文本插入符号”之外的透明字体?

    我有一个简单的文本区域 我需要制作透明字母 同时允许文本插入符可见 当我应用以下规则时 我会得到隐形插入符 textarea background transparent opacity 0 当我键入不可见文本时 我需要看到文本插入符移动
  • 我的 CSS 未在 Internet Explorer 11 和 Firefox 中加载!仅适用于 Chrome

    我正在创建一个简单的网页 我的 CSS 只能在 Chrome 中使用 它在 Firefox 和 IE11 中都不起作用 这是我的 HTML h1 b u Adding a new Visitor u b h1 br div class wr
  • CSS设置默认滚动位置

    有没有办法将滚动位置设置为默认值 我知道如何在 javascript 中做到这一点 例如使用 jquery div divWithScroll attr scrollTop 200 但我只想用CSS来做 我不知道是否可行 不 CSS 中没有
  • 如何在HTML中的PHP中注释掉HTML和PHP?

    这是我想注释掉的一行代码 h1 class post title a href title a h1 一种流行的注释方法是分别注释 html 和 php 有一个更好的方法吗
  • HTML5 历史 API

    我如何使用 HTML5 历史 api 我确实经历过https developer mozilla org en DOM Manipulated the browser history https developer mozilla org
  • Modernizr - 加载 polyfills / 使用自定义检测的正确方法

    我想在网页上使用一些新的 HTML5 表单属性和输入类型 有些浏览器已经支持它们 有些浏览器不支持 也永远不会支持 这就是我想使用 Modernizr 的原因 这就是我的麻烦开始的原因 据我了解 Modernizr 本身并不是一个 poly
  • 在网页上的文本框中键入内容时删除所有空格

    我如何在用户打字时即时删除输入到文本框中的空格 function var txt myTextbox var func function txt val txt val replace s g txt keyup func blur fun
  • 如何将此 HTML 表格布局解决方案转换为浮动 div 解决方案?

    我经常需要列出各种尺寸的项目images在左边和text在右边 像这样 替代文本 http www deviantsart com upload 7s01l5 png http www deviantsart com upload 7s01
  • 防止用户在下拉菜单中选择默认值

    我试图阻止用户选择默认的下拉菜单选项 有没有办法在下拉菜单选项中添加文本而不是值 我的代码
  • R 数据结构的运算效率

    我想知道是否有任何关于操作效率的文档R 特别是那些与数据操作相关的 例如 我认为向数据框添加列是有效的 因为我猜您只是向链接列表添加一个元素 我想添加行会更慢 因为向量保存在数组中C level你必须分配一个新的长度数组n 1并将所有元素复
  • 如何通过php获取网页的Open Graph协议?

    PHP 有一个简单的命令来获取网页的元标记 get meta tags 但这仅适用于具有名称属性的元标记 然而 开放图谱协议如今变得越来越流行 从网页获取 opg 值的最简单方法是什么 例如 我看到的基本方法是通过 cURL 获取页面并使用
  • 悬停时为 SVG 制作动画

    我正在尝试在悬停时为 SVG 文件设置动画 默认情况下 它可以使用 svg 函数实现出色的动画效果 例如
  • 需要有关 React Js 的帮助

    我是 React Js 新手 我的代码无法正常工作 请看下面 这是我的脚本文件Main jsx 该文件由 React 编译 输出放置在 dist 文件夹下的 main js 文件中 var react require react react

随机推荐

  • 将 Firebase Admin SDK 添加到 Unity 项目

    我是 Unity 和 C 的新手 对 C 和所有 NET 东西来说真是菜鸟 我想在我的 Unity 项目中使用 Firebase 实时数据库 我按照以下说明进行操作Firebase 文档进行设置 但在我创建了一个新的 p12 文件并添加后这
  • 使用 Pandas 将列转换为行

    所以我的数据集包含 n 个日期的一些位置信息 问题是每个日期实际上是不同的列标题 例如 CSV 看起来像 location name Jan 2010 Feb 2010 March 2010 A test 12 20 30 B foo 18
  • 私有成员函数,它采用指向同一类中私有成员的指针

    我怎样才能做到这一点 以下代码不起作用 但我希望它能解释这个想法 class MyClass private int ToBeCalled int a char b typedef MyClass FuncSig int a char b
  • Android中EditText的InputType

    我想要以下内容 应首先显示数字键盘 但应该可以更改为文本键盘并输入一些字母 我问了几乎同样的问题并接受了答案 Android中EditText的InputType 但现在我发现一些奇怪的行为 设置输入类型 to Number 可以将键盘更改
  • 设置axes.linewidth而不更改rcParams全局字典

    因此 似乎无法执行以下操作 它会引发错误 因为axes没有set linewidth方法 axes style linewidth 5 axes rect 0 1 0 1 0 9 0 9 axes axes rect axes style
  • 如何使用 Dapper 执行插入和返回插入的身份?

    如何使用 Dapper 执行数据库插入并返回插入的身份 我尝试过这样的事情 string sql DECLARE ID int INSERT INTO MyTable Stuff VALUES Stuff SELECT ID SCOPE I
  • .Net 如何允许可空值设置为 Null

    The Nullable
  • 将字典附加到字典[重复]

    这个问题在这里已经有答案了 我有两本现有词典 我希望将其中一本 附加 到另一本 我的意思是 另一个字典的键 值应该放入第一个字典中 例如 orig A 1 B 2 C 3 extra D 4 E 5 dest Something here
  • “Vary: Accept”HTTP 标头的作用是什么?

    我使用 PHP 生成动态网页 正如以下教程中所述 请参阅下面的链接 当 SERVER HTTP ACCEPT 允许时 XHTML 文档的 MIME 类型应为 application xhtml xml 由于您可以使用 2 个不同的 MIME
  • Java按引用传递问题[重复]

    这个问题在这里已经有答案了 可能的重复 Java是按引用传递吗 我这里有这门课 public class Cat private String catNum private static Cat cat1 private static Ca
  • 使用 SAX 解析器解析自关闭 XML 标签时遇到问题

    我在使用 SAX 解析自关闭 XML 标签时遇到问题 我正在尝试从 Google Base API 中提取链接标签 我在解析常规标签方面取得了一定的成功 这是 xml 的一个片段
  • 如何通过连接和基于行的限制(分页)在休眠中获得不同的结果?

    我正在尝试使用基于行的限制来实现分页 例如 setFirstResult 5 and setMaxResults 10 在具有与其他表的联接的 Hibernate Criteria 查询上 可以理解的是 数据被随机切断 并解释了原因here
  • 如何让div居中?

    我在 HTML 中居中 div 时遇到问题 垂直和水平 我的代码看起来像这样 div SOME HTML div container width 366px height 274px margin 50 top 137px left 188
  • hive 中的 regexp_extract 给出错误

    我的表中有一些数据 例如 id params 123 utm content doit utm source direct 234 utm content polo utm source AndroidNew 使用 regexp extra
  • Visual Studio 新项目“确定”按钮呈灰色

    我认为这只是意味着我缺少依赖项 但我无法创建任何类型的项目 控制台应用程序 Web 应用程序 Windows 窗体等 我运行的是 VS 2012 premium 您可能正在尝试将项目保存到您没有写入权限的目录位置 它可能是某处的网络驱动器
  • MATLAB - 编译 jpeg_read.c 创建 mexmaci64 文件时出错[重复]

    这个问题在这里已经有答案了 最近 我将 Matlab 项目从 Windows 操作系统转移到了 Mac 操作系统 所以我的 jpeg read mexw64 文件不再工作 我需要创建一个与 Mac OS 兼容的新 mexmaci64 文件
  • 显示应用程序端点的照片

    这是我的问题 我在一个大型 UCMA 项目上工作了 3 个月 现在我想添加一个小功能 我有很多可以动态添加 修改或删除的 ApplicationEndpoint 我希望每次创建 ApplicationEndpoint 时都指定将在 Micr
  • 位图、Bitmap.recycle()、弱引用和垃圾回收

    据我所知 在 Android 上 建议将 Bitmap 对象作为 WeakReferences 引用 以避免内存泄漏 当位图对象不再保留硬引用时 垃圾收集器将自动收集它 现在 如果我理解正确的话 必须始终调用 Bitmap recycle
  • C++ SDL 的作用是什么?做?

    screen SDL SetVideoMode 1000 1000 32 SDL HWSURFACE SDL FULLSCREEN 什么是 do in SDL HWSURFACE SDL FULLSCREEN 我尝试谷歌搜索 但谷歌不接受特
  • 画布渐变表现

    我目前正在使用画布编写一个小游戏 对于游戏 我需要某种雾来隐藏地图的大部分 并且只有玩家周围的一小部分区域应该可见 为此 我使用第二个画布覆盖游戏发生的画布 并用渐变填充它 从透明到黑色 function drawFog fogc clea