当前位置: 首页 > 知识库问答 >
问题:

在p5.js中,清除draw()中每帧都要更改的元素,但保留setup()中创建的昂贵元素(一个映射)

田博易
2023-03-14

使用P5.js和D3.js进行映射,我在画布上的setup()中加载了特定县的美国地图。这需要大约1/2-1秒来加载,因为shapefile相当大

draw()中,我创建了一些文本、椭圆等,我希望使用滑块进行更新,并可能创建一些额外的动画。

通常在p5.js中,您只需在draw()之后使用background(255)来清除所有内容,并使过渡平滑,这样就不会有任何重叠,旧的椭圆和文本会被清除,等等。

我的问题是我的初始地图是如此昂贵的加载,我不能抹去它和重新绘制它每一帧,它落后于所有。我需要绘制一次地图,然后在地图之外的所有其他元素上做一个背景(255),或者基本上清除每一帧在draw()中创建的所有内容,同时将在setup()中创建的地图留在画布上。或者只清除地图以外的所有元素。

下面是我在p5编辑器中所做的假设代码。背景中的rect是地图的占位符。您可以看到,因为文本和椭圆没有被删除,它们重叠,一旦椭圆达到一定的大小,您就不能减小它们的大小,因为大的椭圆仍然存在。

https://editor.p5js.org/dfeusse/sketches/hkje2kj9m

共有1个答案

韩飞翮
2023-03-14

您有几个选择:

>

  • 如果地图始终相同,则可以将其保存到图像文件中。将它加载到setup()函数中的变量中,然后在draw()函数中绘制它。

    如果映射在程序运行期间可能发生变化,那么可以在setup()中将映射绘制到缓冲区,然后在draw()中绘制该缓冲区。creategraphics()函数将在这里派上用场。

        var pg;
    
        function setup() {
          createCanvas(100, 100);
          pg = createGraphics(100, 100);
          pg.background(100);
          pg.noStroke();
          pg.ellipse(pg.width / 2, pg.height / 2, 50, 50);
        }
    
        function draw() {
          background(200);
          image(pg, 50, 50);
          image(pg, 0, 0, 50, 50);
        }
    

  •  类似资料:
    • 我正在尝试将一个类添加到一个特定的元素中。用户单击remove按钮,在将“remove”类添加到包含行DIV之后,表中包含该按钮的整行应显示为禁用。使用Array.Map创建了多行。我试了一下:如何使用refs访问/重写元素的className?但是useRef只针对迭代中创建的div的最后一个版本,而useState for conditional className则更改该div的所有迭代。

    • 问题内容: 我有这个arraylist: 如何构造语句,以便每500帧删除arraylist 中的最后一个元素?是否需要某种循环? 问题答案: 如果您已经有了一个变量,可以跟踪您所处的帧,则可以使用以下if语句: 由于您将其用作ArrayList的remove方法的参数,因此我也这样做了,但请注意,由于arrayList索引从0开始计数,因此它将始终删除arrayList中的第二个对象。 仅在帧数

    • 问题内容: 我有一个非常大的.xml文件,我正在尝试制作一个新的.xml文件,该文件只包含了该较大文件内容的一小部分。我想指定一个属性(在我的情况下为itemID),并为其指定一些特定的值,然后它将除去所有具有那些itemID及其子元素的元素。 我的大型.xml文件如下所示: 该文件大约有9万行,大约9兆字节。 注意如何有itemID,某些项目类型可以(但不总是)在其中包含更多项目,并且这些子项也

    • 问题内容: 我想创建一个2d numpy数组,其中每个元素都是其索引的元组。 范例(4x5): 我将创建具有以下列表理解的python : 是否有更快的方法可以达到相同的效果,也许使用numpy方法? 问题答案: 这是一个基于初始化的方法- 样品运行- 到目前为止针对网格化和更大尺寸发布的所有方法的运行时测试-

    • 我被分配了一项编程任务,但我被卡住了。其说明如下: 有一个名为“秘密圣诞老人”(给他们礼物)的游戏,有很多孩子参加。对于每个参与的孩子,都有一个来自参与孩子的秘密圣诞朋友。我必须编写一个程序,为每个参与的孩子挑选一个秘密的圣诞老人朋友。 示例:如果Bob,Alice,John和George是参与的孩子,在随机选择之后, 输出可能看起来像 具有相同输入的连续两次程序运行不应有相同的结果。 我的想法是

    • 给定下面的代码: HTML: 断续器 我必须使用此代码才能删除元素吗?它似乎太冗长了。