从 Typescript 中的 For 循环在画布上绘制线条不会呈现

Posted

技术标签:

【中文标题】从 Typescript 中的 For 循环在画布上绘制线条不会呈现【英文标题】:Drawing Lines on a Canvas from a For-Loop in Typescript doesnt render 【发布时间】:2020-08-20 19:37:50 【问题描述】:

我当时是为了好玩而制作了一个绘图工具,然后它变成了一个真正的项目......

我试图实现一个非常简单的图形......一个折线图。

但是,在我的 typescript 项目中使用 for 循环不会产生任何结果。

查看下面的源代码,您可以看到我有控制台日志,我需要在其中确认某个操作正在发生。在我的 typescript 项目中,它们都运行良好且顺序完美。

由于 SO 不支持 typescript,这里有一个带有 完整源代码和 typescript 编译器的 codepen: https://codepen.io/SkylerSpark/pen/zYvpWNZ

导致我出现问题的代码段:

g.px & g.py 是我的坐标。它们是从这个数组中获取的(它是一个披萨销售的示例数组):

const pizzas = 
    x: [0, 5, 10, 15, 20, 25, 30, 35, 40],
    y: [0, 1, 2, 3, 4],
    px: [0, 5.2, 7, 20.9, 34.3, 39.5],
    py: [0, 1.1, 1.3, 2.7, 3.5, 3.9]
;
// Draw Numbers
if (g.px.length == g.py.length) 
    console.log("confirm");
    for (var i = 1; i < g.px.length + 1; i++) 
        if (i == 1) 
            console.log("start");
            ctx.beginPath();
            ctx.moveTo(g.px[i], g.py[i]);
         else if (i < g.px.length) 
            console.log("continue");
            ctx.lineTo(g.px[i], g.py[i]);
         else 
            console.log("draw");
            ctx.stroke();
        
        console.log(i);
    

现在看下图,它运行良好:

【问题讨论】:

如果有人好奇的话,控制台中删除的警告是 codepen 的非法同站点 HTTP Cookies 【参考方案1】:

问题是您的 y 值必须为负数。在这样的情况下,只画一条线而不是立即使用循环通常很有用。我通过添加以下代码发现了这一点

        ctx.beginPath();
        ctx.moveTo(-40, -40);
        ctx.lineTo(40, -40);
        ctx.lineTo(40, 40);
        ctx.lineTo(-40, 40);
        ctx.stroke();

就在你开始画线之前,它实际上显示了一些结果。如果我在任何地方将g.py[i] 更改为-g.py[i],则会在图表的左下方添加一条小线。希望这会有所帮助!

【讨论】:

facepalm 我完全忘记了 -y 的事情......昨天下午我一直在玩负数和正数数学,只是为了让这些数字正确呈现。估计我的脑子太糊了。现在我知道了,我实际上可以计算 x 和 y 的实际位置并绘制 em

以上是关于从 Typescript 中的 For 循环在画布上绘制线条不会呈现的主要内容,如果未能解决你的问题,请参考以下文章

Typescript 元素隐式地具有任何类型,带有 for...in 循环

TypeScript(08): 循环

07-TypeScript的For循环

typescript for循环

TypeScript系列教程10循环语句的使用

TypeScript系列教程10循环语句的使用