Javascript 有没有办法在p5.js中使用默认字体在文本后面放置一个框?

Javascript 有没有办法在p5.js中使用默认字体在文本后面放置一个框?,javascript,fonts,processing,p5.js,opentype,Javascript,Fonts,Processing,P5.js,Opentype,我想在p5.js画布上制作一个紧紧围绕文本的方框——这是可以做到的,但我只能通过将新字体加载到程序中来解决 是否可以使用默认字体创建文本后面的紧框,从而避免加载新字体 进一步解释 要在画布上的某些文本周围形成一个紧密的框,可以使用textBounds()方法来获得文本的边界。您将获得紧紧围绕文本的方框角的位置。现在,在我放在下面的代码片段中的p5.js示例中,在使用textBounds()获取包含文本的框的边界之前,必须使用loadFont()加载字体。我的问题是,如何在不加载字体而只使用默认字

我想在p5.js画布上制作一个紧紧围绕文本的方框——这是可以做到的,但我只能通过将新字体加载到程序中来解决

是否可以使用默认字体创建文本后面的紧框,从而避免加载新字体

进一步解释
要在画布上的某些文本周围形成一个紧密的框,可以使用
textBounds()
方法来获得文本的边界。您将获得紧紧围绕文本的方框角的位置。现在,在我放在下面的代码片段中的p5.js示例中,在使用textBounds()获取包含文本的框的边界之前,必须使用loadFont()加载字体。我的问题是,如何在不加载字体而只使用默认字体的情况下做到这一点

例如,我必须为下面的“代码片段”使用外部托管的google字体我宁愿在默认字体后面放一个框,以避免加载一些字体。

let字体;
让textString='Lorem ipsum dolor sit amet';
函数预加载(){
font=loadFont('https://raw.githubusercontent.com/google/fonts/master/ofl/alikeangular/AlikeAngular-Regular.ttf');
}
函数设置(){
背景(210);
设bbox=font.textBounds(textString,10,30,12);
填充(255);
冲程(0);
rect(bbox.x,bbox.y,bbox.w,bbox.h);
填充(0);
仰泳();
文本字体(字体);
文本大小(12);
文本(textString,10,30);
}

根据设计,定义字体后必须调用
p5.Font.textBounds()
——您将在p5.Font类的许多其他方法中看到同样的情况,例如
textToPoints()
。这是有原因的——

  • 使用p5.js无法从给定浏览器检索默认字体
  • 不管怎样,设置应用程序使用的字体是一种很好的做法,因为不同浏览器的“默认”是不同的。如果您在MacOS上编写处理程序,然后在Windows上运行,则同样适用-默认字体将自动映射到给定平台上最合适的“默认”字体

  • TL;DR-不,如果不定义字体,就无法运行
    textBounds()

    我有一个p3方法,可以添加换行符,这样我的文本就不会超过包含它的平铺。我不确定它是否有帮助,但如果你这么认为,我可以发布它。不,你确实想使用显式字体:不能保证默认字体对于不同的人看起来是一样的,因为p5并不预先假定它(它只是依靠一个字体名在人们的计算机上神奇地存在,甚至不能指明它需要的字体版本)。因此,如果你不想使用谷歌字体,请使用你自己的字体(woff2或更旧的woff格式,而不是ttf或otf)在与你的页面相同的目录中,而不是在google上,工作完成了。我很难让p5.js使用woff2,但在较旧的ttf/otf上没有问题。这是默认行为吗?好的,我明白了原因。p5.js在你调用它之前不知道字体。假设,我打赌开发人员可以让p5.js确定这一点,如果他们愿意的话e必须通过额外的代码,找到一种源字体,来做一些应该很简单的事情,这似乎是愚蠢的。除非具体地说,他们做不到。在浏览器中运行的JS不能询问给定的字体版本,这意味着任何JS都可以告诉那些使用Arial 3.0和Arial v5.001的人(这两个版本完全不同),只是因为名称匹配,所以使用相同的字体。更有趣的是,像San Fransisco,它既是一种搞笑的幻想字体(从1984年开始),也是一种干净的UI字体(从2015年开始).我从你的话中了解到,在浏览器中运行的JS不会在启动时加载默认字体。如果你要求它使用某个字体,而不要求它从其他地方使用指定字体,它只会获取默认字体并盲目使用。为什么JS不问默认字体是什么并加载默认字体启动时使用默认字体,而不是在调用时盲目地使用它?