使用输入坐标移动精灵
Sprite moving using input coordinates
/************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]));
}
};
我正在开发一款机器人游戏,我正在使用移相器 library.My 要求是将 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;
}
好的,看来您的问题与如何使用从外部源(通过网络)获取的坐标在游戏世界中定位 Sprite 有关。这是任何多人游戏中的问题。基本上,当您的服务器的位置与您的用户正在做的事情天生不合时宜时,您如何定位您的玩家? Here is a really good article from Valve on the subject. You don't need to do all of that for a single player game that's just setting a position from a websocket. However, I would recommend saving the last 1 or 2 last_positions
coordinates, and lerping 在等待下一个值坐标时它们之间。
如果您的问题与如何从外部脚本获取坐标到您的 Phaser 游戏更相关,那么看起来您目前正在将 WebSocket 数据存储到 HTML div?如果是这样,Phaser 仍然是 JS,并且具有与 DOM 交互的能力。在您的 update()
函数中,访问 DOM 中的元素并获取您的值。
虽然我不能说我会推荐这种方法。我敢打赌 DOM 中的 writing/retrieving 会招致 I/O(甚至可能是某种重新渲染)惩罚。相反,我会建议在您的 websocket 脚本之前加载您的游戏脚本,在您的游戏中公开一个全局 updateCoordinates(x,y)
函数,并使用来自您的 websocket 脚本的回调。然后您可以更新您的 1 或 2 last_positions
,并在这些位置之间 update()
插入。
//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);
}
/************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]));
}
};
我正在开发一款机器人游戏,我正在使用移相器 library.My 要求是将 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;
}
好的,看来您的问题与如何使用从外部源(通过网络)获取的坐标在游戏世界中定位 Sprite 有关。这是任何多人游戏中的问题。基本上,当您的服务器的位置与您的用户正在做的事情天生不合时宜时,您如何定位您的玩家? Here is a really good article from Valve on the subject. You don't need to do all of that for a single player game that's just setting a position from a websocket. However, I would recommend saving the last 1 or 2 last_positions
coordinates, and lerping 在等待下一个值坐标时它们之间。
如果您的问题与如何从外部脚本获取坐标到您的 Phaser 游戏更相关,那么看起来您目前正在将 WebSocket 数据存储到 HTML div?如果是这样,Phaser 仍然是 JS,并且具有与 DOM 交互的能力。在您的 update()
函数中,访问 DOM 中的元素并获取您的值。
虽然我不能说我会推荐这种方法。我敢打赌 DOM 中的 writing/retrieving 会招致 I/O(甚至可能是某种重新渲染)惩罚。相反,我会建议在您的 websocket 脚本之前加载您的游戏脚本,在您的游戏中公开一个全局 updateCoordinates(x,y)
函数,并使用来自您的 websocket 脚本的回调。然后您可以更新您的 1 或 2 last_positions
,并在这些位置之间 update()
插入。
//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);
}