【发布时间】:2016-02-05 08:59:11
【问题描述】:
我正在用 angularjs、socketio 和 node.js 制作白板。
只要我在任何地方都使用固定的画布宽度/高度,我就可以广播鼠标/触摸事件的坐标并实时重新创建图形。但是,我面临的问题是,当试图使画布在不同平台上具有不同的尺寸(想想台式机和智能手机)时,画布必须缩放,图形也是如此,但这会使事情变得很慢。
我目前采用的方法是在原始大小的临时隐藏画布中绘制图形,然后当绘图流暂停时(换句话说,用户已停止涂鸦),我将其缩放并复制到主画布。这样做的问题是,它根本感觉不是很实时,尤其是当用户不停地涂鸦一段时间。我可以尝试的另一种方法是将所有坐标推送到一个数组中,对其应用 2d 仿射变换,然后重绘整个事物。虽然这对于数组大小增加时似乎也不是一个好的解决方案,但反复尝试实时应用转换很容易消耗大量资源。
有没有更好的方法来实现这一点?
【问题讨论】:
-
在最近的鼠标/触摸事件和前一个事件之间画一条线。将它与某种参考宽度或高度图一起广播,以作为您计算的基础。在您的另一个客户端上,将给定的宽度或高度除以本地宽度/高度,然后将该数字乘以给定线数据的 X 和 Y 坐标。画出来然后忘记它。您现在绘制了一条按比例绘制的线,计算需要几纳秒,而内存开销基本上为零。
-
@nick,这是一个好主意,这就是为什么我主要研究 2d 仿射变换的原因,但问题是缩放单个线条是否能准确地反映完整形状的曲线和角度缩放?
-
抱歉回复慢-让我写一个完整的答案
标签: javascript html canvas