亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

五角星探照燈 沒有完全蓋住下面的文字


在谷歌瀏覽器中顯示效果如下圖,不知道是什么問題,感覺代碼都跟老師的差不多

http://img1.sycdn.imooc.com//57c4dd4200011c9104370329.jpg?

在360瀏覽器中正常顯示,如下圖所示:

http://img1.sycdn.imooc.com//57c4dda800016ee903400290.jpg

代碼如下

var searchLight = {

? ? ? ? x: 400,

? ? ? ? y: 400,

? ? ? ? radius: 150,

? ? ? ? vx: Math.random() * 5 + 10,

? ? ? ? vy: Math.random() * 5 + 10

? ? }

? ? var rot = 0;

? ? var isIncreased = true;

? ? window.onload = function() {

? ? ? ? var canvas = document.getElementById("canvas");

? ? ? ? canvas.width = 800;

? ? ? ? canvas.height = 800;

? ? ? ? var ctx = canvas.getContext("2d");



? ? ? ? setInterval(function() {

? ? ? ? ? ? draw(ctx);

? ? ? ? ? ? update(canvas.width, canvas.height);

? ? ? ? ? ? //update2();

? ? ? ? }, 40)



? ? }


? ? function draw(ctx) {


? ? ? ? var canvas = ctx.canvas;

? ? ? ? ctx.clearRect(0, 0, canvas.width, canvas.height)


? ? ? ? ctx.save();


? ? ? ? ctx.beginPath();

? ? ? ? ctx.fillStyle = "black";

? ? ? ? ctx.fillRect(0, 0, canvas.width, canvas.height);

? ? ? ?


? ? ? ? ctx.save();

? ? ? ? ctx.translate(searchLight.x, searchLight.y);

? ? ? ??

? ? ? ? ctx.rotate(rot / 180 * Math.PI)

? ? ? ? ctx.scale(searchLight.radius, searchLight.radius);

? ? ? ? startPath(ctx)

? ? ? ? ctx.fillStyle = "#fff";

? ? ? ? //ctx.arc(searchLight.x, searchLight.y, searchLight.radius, 0, 2 * Math.PI);

? ? ? ? ctx.fill();

? ? ? ? ctx.restore();

? ? ? ? ctx.clip();



? ? ? ? ctx.textAlign = "center";

? ? ? ? ctx.textBaseline = "middle";

? ? ? ? ctx.font = "bold 150px Arial";

? ? ? ? ctx.fillStyle = "#058";

? ? ? ? ctx.fillText("CANVAS", canvas.width / 2, canvas.height / 4);

? ? ? ? ctx.fillText("CANVAS", canvas.width / 2, canvas.height / 2);

? ? ? ? ctx.fillText("CANVAS", canvas.width / 2, canvas.height * 3 / 4);


? ? ? ? ctx.restore();

? ? }


? ? function update(width, height) {


? ? ? ? rot += 1;

? ? ? ? searchLight.x += searchLight.vx;

? ? ? ? searchLight.y += searchLight.vy;


? ? ? ? console.log(searchLight.x, searchLight.y);

? ? ? ? //碰撞檢測

? ? ? ? //右邊

? ? ? ? if (searchLight.x + searchLight.radius >= width) {

? ? ? ? ? ? searchLight.x = width - searchLight.radius;

? ? ? ? ? ? searchLight.vx = -searchLight.vx;

? ? ? ? }

? ? ? ? //左邊

? ? ? ? if (searchLight.x - searchLight.radius <= 0) {

? ? ? ? ? ? searchLight.x = searchLight.radius;

? ? ? ? ? ? searchLight.vx = -searchLight.vx;

? ? ? ? }

? ? ? ? //上邊

? ? ? ? if (searchLight.y - searchLight.radius <= 0) {

? ? ? ? ? ? searchLight.y = searchLight.radius;

? ? ? ? ? ? searchLight.vy = -searchLight.vy;

? ? ? ? }

? ? ? ? //下邊

? ? ? ? if (searchLight.y + searchLight.radius >= height) {

? ? ? ? ? ? searchLight.y = height - searchLight.radius;

? ? ? ? ? ? searchLight.vy = -searchLight.vy;

? ? ? ? }

? ? }


? ? //畫五角星

? ? function startPath(ctx) {

? ? ? ? ctx.beginPath();

? ? ? ? for (var i = 0; i < 5; i++) {

? ? ? ? ? ? ctx.lineTo(Math.cos((18 + i * 72) / 180 * Math.PI), -Math.sin((18 + i * 72) / 180 * Math.PI));

? ? ? ? ? ? ctx.lineTo(Math.cos((54 + i * 72) / 180 * Math.PI) * 0.5, -Math.sin((54 + i * 72) / 180 * Math.PI) * 0.5);

? ? ? ? }

? ? ? ? ctx.closePath();

? ? }


正在回答

1 回答

問題出在繪制五角星路徑,Chrome下ctx.clip();存在問題,繪制多邊形如果角度太小ctx.clip();的剪切就會超出路徑范圍,如果你換成三角形或是圓形四方形 就不存在這些問題。怎么解決我也不知道。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Canvas繪圖詳解
  • 參與學習       72996    人
  • 解答問題       441    個

Canvas系列教程第二課,詳解Canvas各接口,讓同學徹底掌握Canvas繪圖

進入課程

五角星探照燈 沒有完全蓋住下面的文字

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號