问题描述
最近,我开始研究一个基于MMORPG 2D瓦片的简单世界(仅供学习)。
我开始在服务器上工作(网络,消息编码/解码和ect'),并假设2个整数足以满足精灵位置。
我使用整数的优点:
另一方面,当我到达客户端实现时,我不知道如何实现平滑的滚动和移动速度,因为每次更新的位置都是两个整数,它们绑定到tile内的特定位置(使用Camera2D转换)。
我希望能够根据精灵速度(和瓦片类型)查看瓦片之间的精灵运动。
我的相机代码:
.startAfter()
我的图块数据结构如下:
public class Camera2D
{
private Vector2 _pos;
private int _viewportWidth;
private int _viewportHeight;
private float _textureWidth;
private float _textureHeight;
public Matrix Transformation
{
get
{
return Matrix.CreateTranslation(new Vector3(-this._pos.X-this._textureWidth/2,-this._pos.Y-this._textureHeight/2,0)) *
Matrix.CreateTranslation(new Vector3(this._viewportWidth * 0.5f,this._viewportHeight * 0.5f,0));
}
}
public Camera2D(int viewportWidth,int viewportHeight,float tlieWidth,float tileHeight)
{
this._viewportHeight = viewportHeight;
this._viewportWidth = viewportWidth;
this._tileHeight = tileHeight;
this._tileWidth = tlieWidth;
this._pos = new Vector2(0,0);
}
public void Follow(Sprite sprite)
{
this._pos.X = sprite.Position.X;
this._pos.Y = sprite.Position.Y;
this._textureWidth = sprite.Texture.Width;
this._textureHeight = sprite.Texture.Height;
}
}
位置:
Tile[,] _mapTiles;
我想向客户发送精灵的速度并在客户端中进行所有模拟,但是由于客户端网络的不同,我认为这是不可行的,这会导致大量的同步问题。
到目前为止,我的moto:服务器应仅依靠自身并负责模拟,而客户端将获得更新并基于更新进行呈现(以及内部客户端预测)。
您认为我应该如何解决所描述的问题?
谢谢!
编辑:
除了2个整数(X,Y)外,我还可以管理两个字节(对于X和Y轴)大小的附加块内偏移:
Position(X,Y,inTileOffsetX,inTileOffsetY)=(X + inTileOffsetX / 128,Y + inTileOffsetY / 128)
可以通过inTileOffset更新值来控制速度,这意味着我将拥有最大128种可能的速度。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)