2

我正在使用 EaselJS 开发基于 2d 画布的应用程序,用户可以通过拖动背景在 xy 平面上无限移动。想想谷歌地图,除了背景是重复的瓷砖。

运动的代码非常简单,看起来像这样:

// container  - the createjs.Container being panned
// background - a createjs.Shape child of container, on which the 
//              background is drawn
background.onPress = function(evt) {
  var x = evt.stageX, y = evt.stageY;

  evt.onMouseMove = function(evt) {
    // the canvas is positioned in the center of the window, so the apparent 
    // movement works by changing the registration point of the container in 
    // the opposite direction.
    container.regX -= evt.stageX - x;
    container.regY -= evt.stageY - y;
    x = evt.stageX;
    y = evt.stageY;
    stage.update();
  };

  evt.onMouseUp = function(evt) {
    // Here the background would be redrawn based on the new container coords.  
    // However the issue occurs even before the mouse is released.
    background.redraw();
    stage.update();
  };
};

所有工作都按预期工作,直到任一轴上达到 32678px (2^15)。在不同的浏览器中发生的事情是不同的,但它首先发生的点是相同的。

在 Firefox 中,它会突然移动一大块像素 (~100) 而不是 1。然后它会在 65538 (2^16+2) 处再次发生,之后可能会更多,但我没有亲眼目睹。在故障点之后,阻力将继续顺利,如预期的那样,但保持移动。

在 Chrome 中,效果更加显着。绘图中断并导致在 32768 处的页面上重复出现约 100 像素宽的背景“条纹”,并且在重绘时不会自行纠正。

奇怪的是,EaselJS 中的数字并没有反映这个问题。容器变换矩阵的唯一变化是txorty递增 1。其他矩阵没有变化。似乎EaselJS的所有数字都是正确的。

任何人都可以阐明这个问题吗?

编辑:
我通过使用计算的 regX/regY 重绘容器的某些部分来解决这个问题,而不是尝试在画布上转换非常大的 regX/regY 坐标。

4

1 回答 1

1

这个问题可能与

HTML 画布的最大尺寸是多少?

根据我收集的浏览器用于short int存储画布大小的信息,最大可能值为 32,767。

可能与您的问题相关的链接,

于 2012-12-02T08:36:47.917 回答