3

我正在通过JSON数据和CreateJS创建Canvas中的练习的大项目。在HTML 5中使用它的目的是不必为您的手机使用单独的应用程序,您始终可以使用该网站。CreateJS - 缩放画布不会缩放鼠标坐标

一切工作正常,但在移动画布被重新调整到全屏。这是通过检查屏幕尺寸做的,如果它小到可以移动画布是通过这个代码缩放:

// browser viewport size 
var w = window.innerWidth; 
var h = window.innerHeight; 

// stage dimensions 
var ow = canvasWidth; 
var oh = canvasHeight; 

// keep aspect ratio 
var scale = Math.min(w/ow, h/oh); 
stage.scaleX = scale; 
stage.scaleY = scale; 

// adjust canvas size 
stage.canvas.width = ow * scale; 
stage.canvas.height = oh * scale; 

这对于大多数练习的伟大工程,像测验和这样的,在这里你有要做的是点击一个按钮。不过,我们也有一些拖放练习,还有一个练习,您可以在其中绘制颜色。这些当然要依靠鼠标坐标才能正常工作。问题是,当画布缩放时,鼠标坐标是而不是。所以当你拖动一个物品或者尝试绘制时,会发生偏移。所以你的绘图看起来就像你点击的左边,当拿起一个可拖动的对象时,它不会正确地跟随你的点击。

如果我从一开始就编写代码,我很确定我将如何重新计算坐标,但是由于它们是由CreateJS计算的,所以我不知道该怎么去做。

这是由人大约一年前here,其中有人提出这个解决方案报告为一个问题:

我能够通过添加顶层容器和附上我的位图,为解决此并对其进行缩放。

整个练习是在一个容器内,我试图扩展,但无济于事。我也尝试将比例作为参数发送给创建的练习的各个部分(例如菜单,背景图像等),而不是将它们全部缩放在一起,并且似乎能够正常工作,因为我可以排除绘图层。但由于它是一个大型项目,许多不同的练习和部件需要缩放,所以需要一段时间才能实现,而且我不确定这是一个可行的解决方案。

有没有一种简单的方法来重新调整鼠标坐标以及CreateJS中的画布大小?我在这里找到了纯JavaScript的例子,但是对于CreateJS尤其没有。

回答

3

继续搜索,最后偶然发现了这个,我从未见过: EaselJS - dragging children of scaled parent。这正是我所期待的。我需要改变我这个画坐标:

var coords = e.target.globalToLocal(e.stageX, e.stageY); 

然后,我可以用coords.xcoords.y而不是直接使用e.stageX和e.stageY像以前一样的。

+0

不错的解决方案:) – Hydro