我正在使用 node.js 和 express,我正在使用 nowjs 调用服务器端函数和同步变量。假设用户在画布上绘制为精灵。他的 x,y 坐标保存在服务器端的“位置”数组中。
服务器端:
position = { x : 0; y : 0 }
updatePosition = function (a,b)
{
playerPosition.x += a;
playerPosition.y += b;
}
客户端:
if keypress('right'){ updatePosition(32,0); }
这些是伪代码。当用户按下“右”按钮时,将调用服务器端“updatePosition”函数,该函数将 32(像素)添加到“位置”数组的 x 坐标。然后将该数组与客户端共享,并使用客户端函数在画布上绘制新位置。
假设我不想立即在新位置绘制精灵。我想播放一个步行动画,逐渐将精灵向右移动 32 像素,并且需要 1 秒才能完成。我可以这样实现它:
- 用户按下“右”按钮。
- 动画开始在客户端播放。
- updatePosition 像往常一样被称为服务器端。
- 当客户端上的动画完成后,检查客户端的最终位置是否与服务器端存储的坐标相匹配。
当用户按下“右”按钮/键时,直到 1 秒后他才能重复按键。1 秒长的“行走”动画必须完成并使用服务器端坐标检查最终位置,然后他才能再次按“右”移动他的精灵。
问题:如何跟踪 1 秒服务器端?我不能在客户端这样做,因为用户将能够破解他的客户端以减少动画时间。
是“时间戳”位置数组的解决方案吗?例如位置 = { x : 0; y:0,时间:0}。如果用户再次按下“右”按钮,服务器将检查最后一次位置更新是否大于 1 秒前。如果小于 1 秒,服务器将忽略它。