微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用掩码损失 FPS

如何解决使用掩码损失 FPS

我正在开发一个允许进行图像处理的应用程序,所以我使用了 Javascript 和 PixiJS 库来使它成为可能。我想在画布悬停时更新光标图像

一个解决方 我尝试使用 cursor: url(cursor1.png) 4 12,auto;但我无法调整光标大小。认大小为 64px,我无法设置其他值。

第二种解决方我决定添加到 DOM 并使用 Javascript 更新 x,y 位置,但我遇到了延迟。

第三个解决方是将光标集成到我的画布中。

最后一个解决方案我试图将动作分成 2 个画布。第一个处理图像处理,第二个是我的光标。

在画布悬停时我失去 FPS 之前提出的所有建议,第一个除外。

用于图像处理的初始化主画布

function _initMainCanvas(imgData) {
  let newCanvas = new PIXI.Application({
    width: imgData.width,height: imgData.height,transparent: true
  });

  let blurContainer = new PIXI.Container();

  filters.initFilters();

  // ----------------------------------------------------------------------------------------
  //      normal Sprite
  // ----------------------------------------------------------------------------------------

  let bg = main.createSprite({
    from: imgData.img,interactive: true,filters: [filters.getFilterSharpen(),filters.getFilteradjustment()],width: imgData.width,height: imgData.height
  });
  newCanvas.stage.addChild(bg);

  //$(".blur_cursor").remove();

  // ----------------------------------------------------------------------------------------
  //      Blur Sprite
  // ----------------------------------------------------------------------------------------

  let bgBlured = main.createSprite({
    from: imgData.img,interactive: false,filters: filters.getFilters(),height: imgData.height
  });
  blurContainer.addChild(bgBlured);
  blurContainer.mask = containers.getBlurs();

  newCanvas.stage.addChild(blurContainer);
  newCanvas.stage.addChild(blurContainer);

  select.initSelectionRect();
  newCanvas.stage.addChild(select.getSelectionRect());

  canvas.addMainCanvas(newCanvas);
  document.getElementById("container").appendChild(newCanvas.view);
}

鼠标悬停时初始化画布以更新光标

function _initCursorCanvas(imgData) {
  let cursorCanvas = new PIXI.Application({
    width: imgData.width,transparent: true
  });

  _fillCursorCanvas(cursorCanvas);

  canvas.addCursorCanvas(cursorCanvas);

  document.getElementById("container").appendChild(cursorCanvas.view);
}

function _fillCursorCanvas(cursorCanvas) {
  // emptySprite allows to bind events
  let emptySprite = new PIXI.Sprite();
  emptySprite.interactive = true;
  emptySprite.width = cursorCanvas.screen.width;
  emptySprite.height = cursorCanvas.screen.height;
  cursorCanvas.stage.addChild(emptySprite);

  emptySprite
    .on("pointerdown",canvasEvents.handlerMousedown)
    .on("pointerup",canvasEvents.handlerMouseup)
    .on("pointermove",canvasEvents.handlerMousemove)
    .on("pointerout",canvasEvents.handlerMouSEOut);

  const scale = W / canvas.getWidth();
  const cursorTexture = new PIXI.Texture.from(
    urlManager.replace("index.PHP/","") + "assets/images/cursor_img/50.png"
  );

  let circle = new PIXI.Sprite(cursorTexture);
  circle.width = 50 / scale;
  circle.height = 50 / scale;

  cursorCanvas.stage.addChild(circle);
}

鼠标移动事件

const x = e.data.global.x;
const y = e.data.global.y;

cursor.updatePosition(x,y,W);

有谁知道如何优化鼠标飞行的FPS,先谢谢了!

解决方法

为什么你需要第二个画布? 如果你想更新游标,请在更新循环结束时进行,仅此而已,不要为此创建一个新画布。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?