用画布绘制的星暴形状出现非常像素化(别名)

时间:2011-04-15 12:39:37

标签: javascript html5 canvas

我正在尝试使用画布创建一个“星暴”效果,但片段线看起来非常像素化。我做错了吗?

var rays = 40;
var canvas = $("header canvas")[0];
var ctx = canvas.getContext("2d");

var centre = [canvas.width*0.2,canvas.height*0.90];
var radius = Math.sqrt(Math.pow(canvas.width,2)+Math.pow(canvas.height,2));
var colours = ["red","white"];

var segment = 2*Math.PI/rays;

for(var i=0;i<rays;i++){
    ctx.beginPath();
    ctx.moveTo(centre[0], centre[1]);
    ctx.arc(
        centre[0], 
        centre[1],
        radius,
        segment * i,
        segment * (i+1),
        false
    );
    ctx.lineTo(centre[0], centre[1]);
    ctx.closePath();
    ctx.fillStyle = colours[i % colours.length];
    ctx.fill();
}

2 个答案:

答案 0 :(得分:4)

我建议使用矢量图形(即SVG)而不是画布。它将消除你的像素化线问题。

更具体地说,如果您使用Raphael Javascript库,您的代码可能几乎相同。

额外的好处是拉斐尔也适用于旧版本的IE,因为如果SVG不可用,它可以检测并切换到使用VML。

答案 1 :(得分:1)

消除锯齿由浏览器完成。现在你的代码在Firefox 4和IE9中看起来很棒,但在webkit浏览器中很差。

chrome / safari的工作方式有很多,like this,这在Chrome上看起来不错但在Firefox 4上却很差。

人们已经要求规范作者进行布尔控制抗锯齿,他反对这个想法。