首先,如果问题不明确,抱歉。
我有一个基于浏览器的多人游戏绘图游戏,使用javascript和socket.io。
我有一个画布可以画画,每30ms,x和y位置被发送到服务器,然后将它们播放给其他玩家。
但是这会导致一个问题,如果有人(a
)有一个大屏幕,而某人(b
)有一个较小的屏幕,b
将无法看到整个平局a
会看到一个小抽奖(相对于他的屏幕尺寸)。
如何在b
屏幕上展开a
缩放,并在a
屏幕上缩小b
平局?
N.B:客户端的源代码可在drawmythings.esy.es/app.js上找到
答案 0 :(得分:2)
你需要知道屏幕A和B的屏幕尺寸(让我们只取宽度同样适用于高度)。在A到B之间缩放将是..
e.g。说A的屏幕是2000宽,B是1000宽。
当A在B的屏幕上查看一个点时:
(A.screenWidth / B.screenWidth ) * B.x-position
B屏幕上x = 250的位置= 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位置和屏幕高度也是如此。
通过这种方式,游戏具有“标准”边界集,因此可以使用它来实现对移动等的限制,并且显示仅仅是用户对其的视图。但是我不知道你正在编写的程序有多实用,而且你已经有了一些进展。