我正在使用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秒钟完成。我可以这样实现它:
当用户按下“向右”按钮/键时,他不能重复按键直到1秒钟后。 1秒长的“行走”动画必须完成并使用服务器端坐标检查最终位置,然后再次按“向右”移动他的精灵。
问题:如何跟踪1秒服务器端?我不能在客户端做,因为用户将能够破解他的客户端以减少动画时间。
解决方案是“时间戳”位置数组吗?例如。 position = {x:0; y:0,时间:0}。如果用户再次按下“向右”按钮,服务器将检查上次位置更新是否大于1秒前。如果小于1秒,服务器将忽略它。
答案 0 :(得分:0)
为什么不简单地存储"锁定"在用户会话中?
session.editLock = new Date().getTime();
当客户端触发另一个编辑时,只需:
if(session.editLock && new Date().getTime() - session.editLock > 1000) {
// Return error
}
修改位置对象并不适合我。位置对象用于存储位置,而不是时间。