使用输入坐标移动精灵

时间:2016-08-31 13:11:05

标签: javascript sprite phaser-framework tiled



				/************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;
        }




1 个答案:

答案 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_positionsupdate() 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);
}