【问题标题】:How to (efficiently) reposition KineticJS-shapes after window was resized?调整窗口大小后如何(有效地)重新定位 KineticJS 形状?
【发布时间】:2013-03-03 02:00:00
【问题描述】:

我目前正在将 KineticJS 用于填充窗口的 Canvas 应用程序。画布包含几个主要相对于屏幕中心定位的形状,但也会出现几个其他形状,它们将位于屏幕边缘。

在第一次显示页面时计算所有这些坐标不是问题,但我还没有找到在调整窗口大小之后/调整窗口大小时处理形状坐标的方法。

通过 jQuery,在调整窗口大小时会调整舞台及其图层的大小,但由于这不会改变形状的坐标,以前居中的项目不再居中。

我真的需要遍历每个形状并重新计算它们的坐标吗?不是微不足道的,因为它们是用不同的公式计算的。

旁注,我通过直接访问 Canvas(= w/o KineticJS)实现了相同的应用程序,并通过重新渲染整个画布来处理调整大小;)由于渲染方法包括坐标计算,所以一切都在正确的位置。

【问题讨论】:

  • 你会坚持做你想要的。
  • 好吧.. 不幸的是,手动/直接方式并没有给我舒适的事件处理等,所以我宁愿继续迁移到 kineicjs ;) 无法想象像调整大小这样的基本事情窗口提出了这么大的问题:)
  • 为什么不直接在 kineticjs 中缩放整个舞台,这样就不需要重新计算了。查看我制作的行星轨道调整器:'cs.neiu.edu/~tsam/planets'(拖动太阳调整大小)。这使用比例,而不是重新计算位置。调整窗口大小时,可以将相同的逻辑应用于窗口大小和缩放舞台
  • 由于我使用了几个基于光栅的图像,因此调整大小会缩放这些图像并降低它们的清晰度。除此之外,我的形状周围的房间应该为其他元素留出空间;)

标签: canvas kineticjs


【解决方案1】:

我通过为所有图层定义偏移量并在窗口调整大小发生后重新计算这些偏移量来解决我的问题。尽管并不完美,但计算 8 个值 (4 * x+y) 远比计算数百个值好。

如果有人知道更好的解决方案,我仍然会感兴趣。 ;)

【讨论】:

    猜你喜欢
    • 2019-11-13
    • 2012-02-04
    • 1970-01-01
    • 2012-10-29
    • 2019-05-13
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 2021-04-27
    相关资源
    最近更新 更多