微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的代码不能绘制任何东西,只能显示白色画布

如何解决我的代码不能绘制任何东西,只能显示白色画布

我是 p5.js 的新手,我编写此代码来绘制一些随机循环曲线。但我不知道为什么我的代码不返回任何内容。有人可以指出我们的错误吗?提前致谢!

var modifier1 = 300;
var modifier2 = 300;
var modifier3 = 2;
var addition = 90;
var count = 0;

function setup()
{
  createCanvas(600,600);
    background(255);
}

function draw()
{
  translate(width/2,height/2);
  stroke(237,34,93);
  beginShape();
    while (count < 500)
    {
    var x = modifier1 * sin(radians(modifier3 * frameCount + addition));
    var y = modifier2 * sin(radians(frameCount));
    vertex(x,y);
        count++;
    }
    endShape();
}

解决方法

您的代码没有绘制任何内容,因为您指定了 500 个具有相同坐标的顶点 (vertex)。请注意,xy 不会改变,因为 frameCount 在循环运行时不会改变。因此,该形状仅包含 500 个相同点。
在接下来的框架中,frameCount 已更改,但您再次指定了 500 个具有相同协调器的顶点。坐标与前一帧中的坐标不同,但形状本身由 500 个相同的点组成。

如果您使用 count 而不是 frameCount,您的形状将被立即绘制:

var modifier1 = 300;
var modifier2 = 300;
var modifier3 = 2;
var addition = 90;
var count = 0;

function setup()
{
    createCanvas(600,600);
    background(255);
}

function draw()
{
    translate(width/2,height/2);
    stroke(237,34,93);

    beginShape();
    while (count < 500)
    {
        var x = modifier1 * sin(radians(modifier3 * count + addition));
        var y = modifier2 * sin(radians(count));
        vertex(x,y);
        count++;
    }
    endShape();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.min.js"></script>

如果要“逐步”绘制形状,则需要每帧从 frameCountframeCount + 1 添加 1 个线段:

var modifier1 = 300;
var modifier2 = 300;
var modifier3 = 2;
var addition = 90;
var count = 0;

function setup()
{
    createCanvas(600,93);

    beginShape();
    var x1 = modifier1 * sin(radians(modifier3 * frameCount + addition));
    var y1 = modifier2 * sin(radians(frameCount ));
    vertex(x1,y1);
    var x2 = modifier1 * sin(radians(modifier3 * (frameCount+1) + addition));
    var y2 = modifier2 * sin(radians(frameCount+1));
    vertex(x2,y2);
    endShape();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.min.js"></script>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。