【问题标题】:How can I scale down a draw on canvas to fit screen size如何缩小画布上的绘图以适合屏幕尺寸
【发布时间】:2015-11-29 16:05:21
【问题描述】:

首先,如果问题不清楚,抱歉。

我有一个使用 javascript 和 socket.io 制作的基于浏览器的多人绘图游戏。

我有一个画布可以绘制,每 30 毫秒,x 和 y 位置被发送到服务器,服务器将它们广播给其他玩家。

但这会导致一个问题,如果某人 (a) 有一个大屏幕,而某人 (b) 有一个较小的屏幕,b 将看不到整个绘图,而 a 将看到一个小抽奖(与他的屏幕尺寸相比)。

如何在a 屏幕上放大b 绘图,并在b 屏幕上缩小a 绘图?

注意:客户端的源代码可在 drawmythings.esy.es/app.js 上获得

【问题讨论】:

    标签: javascript node.js canvas


    【解决方案1】:

    您需要知道屏幕 A 和 B 的屏幕尺寸(让我们将宽度与高度相同)。在 A 到 B 之间进行缩放将是..

    例如假设 A 的屏幕是 2000 宽,B 的屏幕是 1000 宽。

    当 A 在 B 的屏幕上查看一个点时:

    (A.screenWidth / B.screenWidth ) * B.x-position

    B 屏幕上 x = 250 处的 A 位置 = A 屏幕上四分之一距离 = (2000 / 1000) * 250 = 500 = A 屏幕上四分之一距离。

    反之,当 B 在 A 的屏幕上查看一个点时:

    (B.screenWidth / A.screenWidth ) * A.x-position

    A 屏幕上 x = 500 处的位置 = B 屏幕上四分之一距离 = (1000 / 2000) * 500 = 250 = B 屏幕上四分之一距离。

    在我看来,最好的选择是将绘制的坐标存储在一个恒定大小的“概念”屏幕中,比如 2000 x 1500(任意)。所以每个点都会有一个基于该比例的 x 位置和 y 位置。

    当用户查看它时,您可以通过在([users screen width] / 2000) * x-position 处绘制它来将其缩放到他们当前的屏幕尺寸,Y 位置和屏幕高度也是如此。

    这样,游戏就有了一组“标准”边界,因此可以使用它来实现对移动等的限制,并且显示只是用户对它的看法。但是我不知道这对你正在编写的程序有多实用,因为你已经取得了一些进展。

    【讨论】:

    • 只有一件事,什么是(/2000)?
    • @FliiFe 谢谢-我什么时候才能知道文本周围的人字形 将其从 Stack Exchange 中隐藏起来。我已经编辑了文本。
    • 哦,虽然那是我不知道的语法:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    相关资源
    最近更新 更多