/************ON RECEIVING MESSAGES VIA WEBSOCKET FROM THE SERVER********/
ws.onmessage = function(event) {
var mySpan = document.getElementById("messageGoesHere");
var mySpan2 = document.getElementById("messageGoesHere2");
var str = event.data;
//var temp = new Array();
//temp = str.split("\\|");
/***********SPLITS THE RECEIVED MESSAGE****************
*********AND STORES THE VALUE IN THE VARIABLES*********/
if((str.localeCompare('connected'))==0)
{
document.getElementById("connection").innerHTML='Connected';
}
else if((str.localeCompare('closed'))==0)
{
document.getElementById("connection").innerHTML='No connection';
}
else{
var array = str.split('|');
mySpan.innerHTML = parseInt(array[5])
mySpan2.innerHTML = parseInt(array[6]);
draw(parseInt(array[5]), parseInt(array[6]));
}
};

我正在开发机器人游戏,我正在使用移相器库。我的要求是将x y坐标传递给机器人(精灵),并且它应该根据该坐标移动而没有任何速度或速度。 我正在使用以下代码来移动机器人。现在我想使用传入的坐标在地图上移动它。所以,请给我一些建议。
// The following code is for the robot movement
// This is initial velocity
player.body.velocity.x = 0;
player.body.velocity.y = 0;
if (cursors.left.isDown)
{
player.body.velocity.x = -200;
}
else if (cursors.right.isDown)
{
player.body.velocity.x = 200;
}
if (cursors.up.isDown)
{
player.body.velocity.y = -200;
}
else if (cursors.down.isDown)
{
player.body.velocity.y = 200;
}

答案 0 :(得分:0)
好的所以看起来你的问题与如何使用从外部来源获得的坐标 - 在网络上将Sprite定位在游戏世界中有关。这是任何多人游戏中的问题。基本上,当您的服务器位置与用户正在做的事情本质上过时时,您如何定位您的玩家? Here is a really good article from Valve on the subject。对于只是从websocket设置位置的单人游戏,你不需要做所有这些。但是,我建议您在等待下一个值坐标时保存最后1或2 last_positions
个坐标和lerping。
如果您的问题与如何从外部脚本到Phaser游戏的坐标更相关,那么您现在看起来正在将WebSocket数据存储到HTML div中?如果是这种情况,Phaser仍然是JS,并且具有与DOM交互的能力。在update()
函数中,访问DOM中的元素并获取您的值。
不能说我会推荐这种方法。我敢打赌,从DOM中编写/检索会产生I / O(甚至可能是某种重新渲染)的惩罚。相反,我建议您在websocket脚本之前加载游戏脚本,在游戏中公开全局updateCoordinates(x,y)
函数,并使用来自websocket脚本的回调。然后,您可以在这些位置之间更新1或2 last_positions
和update()
lerp。
//game.js, load before webSocket
var game = ... //global variable
//state 'PlayGame' is where your robot moves
//webSocket.js
ws.onmessage = function(event) {
...
game.states.state.PlayGame.updateCoordinates(x,y);
}