【问题标题】:Why does Background 0 make text dissapear in P5.JS?为什么 Background 0 会使文本在 P5.JS 中消失?
【发布时间】:2021-10-10 19:08:41
【问题描述】:

我有以下代码块。

我正在尝试使用深色的黑色背景。我已经能够在这个黑色画布上画东西了。现在,我正在尝试在这个黑色背景上添加文本。

let canvasx = 400;
let canvasy = 400;

let defaultTextSize = 50;
let defaultFontType = 'Georgia';
let defaultTextContent = "P5DRAWINGTREEDEFAULTTEXT";
let defaultTextX = 0;
let defaultTextY = 0;

function setup() {
  defaultTextX = canvasx / 2;
  defaultTextY = canvasy / 2;
  createCanvas(400, 400);
}

function draw() {
  background(0);

  doTheWords();
}

function doTheWords() {
  setupDefaultTextStyle()
  testSimpleTextOne();
}

function setupDefaultTextStyle() {
  fill(0, 102, 153, 51);
  textFont(defaultFontType);
  textSize(defaultTextSize);
  textAlign(CENTER, CENTER);
}

function testSimpleTextOne() {
  text(defaultTextContent, defaultTextX, defaultTextY);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js"></script>

除零以外的任何值,用于背景(0);我可以看到我的文字。我输入零的那一刻,文本消失了,但绘图的其余部分(我正在绘制的实际艺术,未在上面的代码中显示)保持原样。

为什么 background(0) 会画掉文本?

注意:文本颜色可以是任何颜色,例如纯白色,但问题仍然存在。

更新 1

我将文本代码移至 setupDefaultTextStyle。

function setupDefaultTextStyle() {
    fill(0, 102, 153, 51);    
    textFont(defaultFontType);
    textSize(defaultTextSize);
    textAlign(CENTER, CENTER);
    text(defaultTextContent, defaultTextX, defaultTextY);
}

现在,我得到了显示。所以,问题解决了,但我还是很好奇,为什么 text 不能作为一个单独的函数调用?

【问题讨论】:

  • 当我执行你的代码时,我可以看到黑色背景顶部的文本。好像无法重现
  • 我直接在 P5 Web Editor 上运行它。你能试一试吗? editor.p5js.org
  • 我更新了您的问题以使用可运行的 sn-p。请在将来使用它。欲了解更多信息stackoverflow.com/questions/67410651/…
  • 我不知道 P5 也可以作为可运行的。我会确保未来的问题有可运行的代码。

标签: javascript p5.js


【解决方案1】:

您分配的 alpha 值太低而无法显示。 (alpha 是填充函数中的最后一个参数)。另外,我做了一些清理工作,因为您提出了一些可以避免的变量。您可以先定义画布,然后使用默认的宽度和高度变量(画布的宽度和高度)来设置defaultTextX和Y

let defaultTextSize = 50;
let defaultFontType = 'Georgia';
let defaultTextContent = "P5DRAWINGTREEDEFAULTTEXT";
let defaultTextX = 0;
let defaultTextY = 0;

function setup() {
  createCanvas(400, 400);
  defaultTextX = width / 2;
  defaultTextY = height / 2;
}

function draw() {
  background(0);

  doTheWords();
}

function doTheWords() {
  setupDefaultTextStyle()
  testSimpleTextOne();
}

function setupDefaultTextStyle() {
  fill(0, 102, 153, 255);
  textFont(defaultFontType);
  textSize(defaultTextSize);
  textAlign(CENTER, CENTER);
}

function testSimpleTextOne() {
  text(defaultTextContent, defaultTextX, defaultTextY);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js"></script>

【讨论】:

    【解决方案2】:

    您的问题显然无法重现。您声称即使使用“纯白色”文本仍然不可见,但正如您所见,它是可见的(在 editor.p5js.org 中的结果相同)。您只是使用了一种非常暗且大部分透明的颜色。

    let canvasx = 400;
    let canvasy = 400;
    
    let defaultTextSize = 50;
    let defaultFontType = 'Georgia';
    let defaultTextContent = "P5DRAWINGTREEDEFAULTTEXT";
    let defaultTextX = 0;
    let defaultTextY = 0;
    
    function setup() {
      defaultTextX = canvasx / 2;
      defaultTextY = canvasy / 2;
      createCanvas(400, 400);
    }
    
    function draw() {
      background(0);
    
      doTheWords();
    }
    
    function doTheWords() {
      setupDefaultTextStyle()
      testSimpleTextOne();
    }
    
    function setupDefaultTextStyle() {
      fill(255);
      textFont(defaultFontType);
      textSize(defaultTextSize);
      textAlign(CENTER, CENTER);
    }
    
    function testSimpleTextOne() {
      text(defaultTextContent, defaultTextX, defaultTextY);
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js"></script>

    【讨论】:

    • 我最近才开始 P5。 P5 新手,JS 新手。为任何错误,错误的主张道歉。这是偶然的,错误的说法。会尽量小心:)
    • 不用担心。对不起,如果我措辞严厉。我很高兴 Olaf 解决了您关于 alpha 值的问题。
    • 实际上,现在我阅读了 Olaf 的回答,我明白为什么您可能会将问题与对 background() 的调用联系起来。如果您没有在每一帧上绘制背景或文本后面的任何其他元素,那么每个连续的帧都会一遍又一遍地绘制相同的文本,本质上使 alpha 值毫无意义(因为如果您将相同的颜色覆盖足够多次,即使每一层都有些透明,结果也会变得不透明)。
    • 没有必要道歉。我自己是一名导师,我对我的学生很苛刻。一些严厉是必要的 :) 额外的笔记有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2022-12-06
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2019-04-25
    • 1970-01-01
    相关资源
    最近更新 更多