我正在尝试使用画布创建一个“星暴”效果,但片段线看起来非常像素化。我做错了吗?
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();
}
答案 0 :(得分:4)
我建议使用矢量图形(即SVG)而不是画布。它将消除你的像素化线问题。
更具体地说,如果您使用Raphael Javascript库,您的代码可能几乎相同。
额外的好处是拉斐尔也适用于旧版本的IE,因为如果SVG不可用,它可以检测并切换到使用VML。
答案 1 :(得分:1)
消除锯齿由浏览器完成。现在你的代码在Firefox 4和IE9中看起来很棒,但在webkit浏览器中很差。
chrome / safari的工作方式有很多,like this,这在Chrome上看起来不错但在Firefox 4上却很差。
人们已经要求规范作者进行布尔控制抗锯齿,他反对这个想法。