我正在制作一个使用socket.io的node.js游戏。我只想发送玩家的更新位置以减少滞后量,而不是不断发送游戏中所有玩家的位置。
我已经考虑了很长时间,但是我仍然没有弄清楚该怎么做。
var oldPositions = {x: 10, y: 50};
var newPosotions = {x: 10, y: 20};
var positionUpdate = myFunction(oldPositions, newPositions);
//so positionUpdate should equal {y: 20}
我想创建一个将返回
的函数{y: 20}
根据我的示例代码。
答案 0 :(得分:0)
您可以按照以下步骤进行操作:
newPositions
获取Object.entries
的条目。filter()
条目,以删除两个对象的值相同的条目。Object.fromEntries
var oldPositions = {x: 10, y: 50};
var newPositions = {x: 10, y: 20};
const myFunction = (a,b) => Object.fromEntries(Object.entries(b).filter(([k,v]) => v !== a[k]))
var positionUpdate = myFunction(oldPositions, newPositions);
console.log(positionUpdate)
k,v是什么意思?
k
表示我们正在迭代的当前密钥,而v
表示相应的值。这是第二个对象。
实际上,数组的条目类似于
[[key1, value1], [key2, value2]...]
现在,当我们在条目上应用filter()
时,每个元素都是数组[key, value]
。该代码正在使用Destructuring assignment
答案 1 :(得分:0)
尝试一下:
var oldPositions = {x: 10, y: 50};
var newPositions = {x: 10, y: 20}
const positionUpdate = (oldPositions, newPositions) =>
Object.keys(newPositions)
.filter(key => oldPositions[key] !== newPositions[key])
.reduce((acc, ele) => (acc[ele] = newPositions[ele], acc),{});
console.log(positionUpdate(oldPositions, newPositions))
答案 2 :(得分:0)
定义如下函数:
function myFunction(oldPosition, newPosition){
if(oldPosition.x != newPosition.x){
newX = oldPosition.x - newPosition.x; //if negative just transform in positive
}else{
newX = newPosition.x;
}
if(oldPosition.y != newPosition.y){
newY = oldPosition.y - newPosition.y; //if negative just transform in positive
}else{
newY = newPosition.y;
}
movement= {
x=newX,
y=newY
};
return movement;
}