You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不降低性能的情况下重绘EaselJS圆形扇区?

我来帮你搞定这个需求!结合你给出的代码片段,我会完整实现按下空格键时,时钟阴影轨迹跟随时钟指针移动且逐帧重绘的功能,下面是具体的实现逻辑和完整代码:

完整实现代码
var stage, cont, arrow, cursorWedge, spacebarState, cursorWedgeStart, fired;
var msg = document.getElementById('state-msg');
var KEYCODE_SPACEBAR = 32;
spacebarState = false;
fired = false;

// 初始化舞台
stage = new createjs.Stage("canvas");
cont = stage.addChild(new createjs.Container());
cont.x = stage.canvas.width / 2;
cont.y = 250;
cont.rotation -= 90; // 把0度调整到顶部(时钟的12点方向)

// 1. 绘制时钟表盘
var circle = new createjs.Shape();
circle.graphics.beginStroke("#333").setStrokeStyle(3).drawCircle(0, 0, 150);
cont.addChild(circle);

// 2. 绘制时钟指针
arrow = new createjs.Shape();
arrow.graphics.beginFill("#ff0000").moveTo(0,0).lineTo(120,0).lineTo(110, -10).lineTo(-10,0).closePath();
cont.addChild(arrow);

// 3. 绘制阴影轨迹(cursorWedge)
cursorWedge = new createjs.Shape();
cursorWedge.graphics.beginFill("rgba(0,0,0,0.2)"); // 半透明灰色作为阴影
cursorWedgeStart = 0; // 阴影起始角度,默认和指针初始角度一致
cont.addChild(cursorWedge);

// 监听键盘事件:处理空格键按下/抬起
document.addEventListener("keydown", function(e) {
  if (e.keyCode === KEYCODE_SPACEBAR) {
    spacebarState = true;
    msg.textContent = "空格键已按下,阴影开始跟随指针";
    // 记录当前指针角度作为阴影起始角度
    cursorWedgeStart = arrow.rotation;
  }
});

document.addEventListener("keyup", function(e) {
  if (e.keyCode === KEYCODE_SPACEBAR) {
    spacebarState = false;
    msg.textContent = "空格键已松开,阴影停止跟随";
  }
});

// 模拟时钟指针旋转(你可以替换成真实的时间逻辑)
createjs.Ticker.framerate = 30;
createjs.Ticker.addEventListener("tick", function(event) {
  // 让指针持续旋转(每秒6度,对应每分钟一圈)
  arrow.rotation += 6 / createjs.Ticker.framerate;
  
  // 当空格键按下时,更新阴影轨迹
  if (spacebarState) {
    // 重绘阴影扇形:从起始角度到当前指针角度
    cursorWedge.graphics.clear().beginFill("rgba(0,0,0,0.2)")
      .moveTo(0,0)
      .arc(0,0,150, cursorWedgeStart * Math.PI/180, arrow.rotation * Math.PI/180)
      .closePath();
    
    // 如果需要阴影是"轨迹"效果(比如保留走过的路径),可以去掉clear(),但要注意性能
    // 不过你的需求是每一帧重绘,所以这里每次clear后重新绘制当前的阴影范围
  }
  
  stage.update(event);
});
关键逻辑说明
  • 键盘状态控制:通过keydown和keyup事件监听空格键,更新spacebarState变量,用来开关阴影跟随功能。
  • 逐帧重绘机制:利用CreateJS的Ticker事件,每帧更新指针角度,同时在空格键按下时,重新绘制cursorWedge的扇形范围,让它跟住指针的当前角度。
  • 阴影轨迹绘制:使用arc方法绘制扇形阴影,通过cursorWedgeStart记录按下空格键时的指针角度,然后每帧绘制从起始角度到当前指针角度的扇形,实现跟随效果。
  • 舞台更新:每帧调用stage.update()确保画布重绘,让阴影的变化实时显示。

如果你需要调整阴影的样式(比如颜色、透明度、半径),只需要修改cursorWedge.graphics里的填充参数和arc的半径值就可以啦!

内容的提问来源于stack exchange,提问作者Matt B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:04:42