Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用画布平滑随机线 var canvas=document.getElementById(“canvas”); var context=canvas.getContext(“2d”); context.canvas.width=window.innerWidth; context.canvas.height=window.innerHeight; var x1=Math.random()*context.canvas.width; var y1=Math.random()*context.canvas.height; var-xdir=0;var-ydir=0; context.beginPath(); setInterval(函数(){ 对于(变量i=0;i0.95){ 如果(xdir0)xdir=(xdir+((Math.random()*1.5)-0.5))/2; else-xdir=(Math.random()*1.5)-0.75; } 如果(兰迪>0.95){ 如果(ydir0)ydir=(ydir+((Math.random()*1.5)-0.5))/2; else ydir=(Math.random()*1.5)-0.75; } lineTo(x1+xdir,y1+ydir); stroke(); x1=x1+xdir; y1=y1+ydir; } },50);_Javascript_Html_Canvas - Fatal编程技术网

Javascript 使用画布平滑随机线 var canvas=document.getElementById(“canvas”); var context=canvas.getContext(“2d”); context.canvas.width=window.innerWidth; context.canvas.height=window.innerHeight; var x1=Math.random()*context.canvas.width; var y1=Math.random()*context.canvas.height; var-xdir=0;var-ydir=0; context.beginPath(); setInterval(函数(){ 对于(变量i=0;i0.95){ 如果(xdir0)xdir=(xdir+((Math.random()*1.5)-0.5))/2; else-xdir=(Math.random()*1.5)-0.75; } 如果(兰迪>0.95){ 如果(ydir0)ydir=(ydir+((Math.random()*1.5)-0.5))/2; else ydir=(Math.random()*1.5)-0.75; } lineTo(x1+xdir,y1+ydir); stroke(); x1=x1+xdir; y1=y1+ydir; } },50);

Javascript 使用画布平滑随机线 var canvas=document.getElementById(“canvas”); var context=canvas.getContext(“2d”); context.canvas.width=window.innerWidth; context.canvas.height=window.innerHeight; var x1=Math.random()*context.canvas.width; var y1=Math.random()*context.canvas.height; var-xdir=0;var-ydir=0; context.beginPath(); setInterval(函数(){ 对于(变量i=0;i0.95){ 如果(xdir0)xdir=(xdir+((Math.random()*1.5)-0.5))/2; else-xdir=(Math.random()*1.5)-0.75; } 如果(兰迪>0.95){ 如果(ydir0)ydir=(ydir+((Math.random()*1.5)-0.5))/2; else ydir=(Math.random()*1.5)-0.75; } lineTo(x1+xdir,y1+ydir); stroke(); x1=x1+xdir; y1=y1+ydir; } },50);,javascript,html,canvas,Javascript,Html,Canvas,这是我的随机行脚本,但我的行非常难看: 有没有更好的方法来使用画布实现平滑线条?看看这个问题: 看看这个问题: HTML5画布上的行在所有浏览器/操作系统(AFAIK)上都能很好地消除锯齿。但是,在更新回调中,每个循环有10个笔划,您既不是也不是,因此每秒在其上绘制200次相同的路径。这会导致所有抗锯齿都被破坏,因为即使是最微弱的不透明度像素也会累积到实线 要使代码看起来漂亮,最简单的修复方法是添加以下行: var canvas = document.getElementById("canvas

这是我的随机行脚本,但我的行非常难看:


有没有更好的方法来使用画布实现平滑线条?

看看这个问题:


看看这个问题:

HTML5画布上的行在所有浏览器/操作系统(AFAIK)上都能很好地消除锯齿。但是,在更新回调中,每个循环有10个笔划,您既不是也不是,因此每秒在其上绘制200次相同的路径。这会导致所有抗锯齿都被破坏,因为即使是最微弱的不透明度像素也会累积到实线

要使代码看起来漂亮,最简单的修复方法是添加以下行:

var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.canvas.width  = window.innerWidth;
context.canvas.height  = window.innerHeight;
var x1 = Math.random()*context.canvas.width;
var y1 = Math.random()*context.canvas.height;
var xdir = 0; var ydir = 0;
context.beginPath();

setInterval(function(){
    for (var i = 0; i < 10; i++) {
        randx = Math.random(); randy = Math.random();

        if (randx > 0.95) {
            if (xdir < 0) xdir = (xdir+((Math.random()*1.5) - 1))/2;
            else if (xdir > 0) xdir = (xdir+((Math.random()*1.5) - 0.5))/2;
            else xdir = (Math.random()*1.5) - 0.75;
        }

        if (randy > 0.95) {
            if (ydir < 0) ydir = (ydir+((Math.random()*1.5) - 1))/2;
            else if (ydir > 0) ydir = (ydir+((Math.random()*1.5) - 0.5))/2;
            else ydir = (Math.random()*1.5) - 0.75;
        }

        context.lineTo(x1+xdir, y1+ydir);
        context.stroke();

        x1 = x1+xdir;
        y1 = y1+ydir;
    }
},50);
for
循环中,例如就在
context.stroke()之前

这一行的更改使它看起来不错,但对性能不好,每次视觉更新都会清除和重画画布10次

这里有一个更好的选择:

context.clearRect(0,0,context.canvas.width,context.canvas.height);
这样,您永远不会清除画布,而是在每一帧中只绘制更改的线

另一种选择(如果您需要始终可用的完整路径)是在一个高速
setInterval
循环中累积对上下文路径的更改,在另一个较慢的循环中,偶尔清除画布并重新绘制整个路径。这与我在模拟中所做的类似。

HTML5画布上的行在所有浏览器/操作系统(AFAIK)上都进行了很好的抗锯齿处理。但是,在更新回调中,每个循环有10个笔划,您既不是也不是,因此每秒在其上绘制200次相同的路径。这会导致所有抗锯齿都被破坏,因为即使是最微弱的不透明度像素也会累积到实线

要使代码看起来漂亮,最简单的修复方法是添加以下行:

var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.canvas.width  = window.innerWidth;
context.canvas.height  = window.innerHeight;
var x1 = Math.random()*context.canvas.width;
var y1 = Math.random()*context.canvas.height;
var xdir = 0; var ydir = 0;
context.beginPath();

setInterval(function(){
    for (var i = 0; i < 10; i++) {
        randx = Math.random(); randy = Math.random();

        if (randx > 0.95) {
            if (xdir < 0) xdir = (xdir+((Math.random()*1.5) - 1))/2;
            else if (xdir > 0) xdir = (xdir+((Math.random()*1.5) - 0.5))/2;
            else xdir = (Math.random()*1.5) - 0.75;
        }

        if (randy > 0.95) {
            if (ydir < 0) ydir = (ydir+((Math.random()*1.5) - 1))/2;
            else if (ydir > 0) ydir = (ydir+((Math.random()*1.5) - 0.5))/2;
            else ydir = (Math.random()*1.5) - 0.75;
        }

        context.lineTo(x1+xdir, y1+ydir);
        context.stroke();

        x1 = x1+xdir;
        y1 = y1+ydir;
    }
},50);
for
循环中,例如就在
context.stroke()之前

这一行的更改使它看起来不错,但对性能不好,每次视觉更新都会清除和重画画布10次

这里有一个更好的选择:

context.clearRect(0,0,context.canvas.width,context.canvas.height);
这样,您永远不会清除画布,而是在每一帧中只绘制更改的线

另一种选择(如果您需要始终可用的完整路径)是在一个高速
setInterval
循环中累积对上下文路径的更改,在另一个较慢的循环中,偶尔清除画布并重新绘制整个路径。这与我在模拟中所做的类似