C ++(SFML)改进网络代码

时间:2016-04-29 17:39:21

标签: c++ networking tcp sfml

我现在已经在我的游戏网络中使用了SFML,我试图在服务器向客户端发送数据时保持数据包大小尽可能小,反之亦然。我正在使用TCP

这是我最初获得基本网络代码并工作时(用于数据包)的原因:

sf::Uint8 c_id = id;
double x = Npc[id].GetX();
double y = Npc[id].GetY();
sf::Uint8 moveState = Npc[id].moveState;
bool jumped = Npc[id].jumped;
sf::Uint32 lookAtX = Npc[id].lookAtX;
sf::Uint32 lookAtY = Npc[id].lookAtY;
sf::Uint8 fires = Npc[id].firesNetwork;
bool isDead = Npc[id].isDead;

这就是我更新它的原因,因为它会有稍小的数据包大小(包括jumped,isDead,fires的任意组合以及在一个名为data的变量中添加isCrouching):

sf::Uint8 c_id = id;
float x = Npc[id].GetX();
float y = Npc[id].GetY();
sf::Uint8 moveState = Npc[id].moveState;
sf::Uint32 lookAtX = Npc[id].lookAtX;
sf::Uint32 lookAtY = Npc[id].lookAtY;
sf::Int8 spreadAngle = Npc[id].spreadAngle;
sf::Uint8 data;

if(Npc[id].isDead)
    data = DATA_DEAD;
else if(Npc[id].jumped && Npc[id].IsAiming() && Npc[id].firesNetwork)
    data = DATA_JUMPED_AIMING_FIRES;
else if(Npc[id].jumped && Npc[id].IsAiming())
    data = DATA_JUMPED_AIMING;
else if(Npc[id].jumped && Npc[id].firesNetwork)
    data = DATA_JUMPED_FIRES;
else if(Npc[id].isCrouching && Npc[id].IsAiming() && Npc[id].firesNetwork)
    data = DATA_CROUCH_AIMING_FIRES;
else if(Npc[id].isCrouching && Npc[id].IsAiming())
    data = DATA_CROUCH_AIMING;
else if(Npc[id].isCrouching && Npc[id].firesNetwork)
    data = DATA_CROUCH_FIRES;
else if(Npc[id].IsAiming() && Npc[id].firesNetwork)
    data = DATA_AIMING_FIRES;
else if(Npc[id].IsAiming())
    data = DATA_AIMING;
else if(Npc[id].firesNetwork)
    data = DATA_FIRES;
else if(Npc[id].jumped)
    data = DATA_JUMPED;
else if(Npc[id].isCrouching)
    data = DATA_CROUCH;
else
    data = DATA_NONE;

我对网络很陌生,这个代码很快就可以通过网络来测试网络。

我在这里问我是否可以进一步改进这个,我应该为ie发送单独的小包。告知客户一些NPC的死亡?

我可以在没有任何滞后问题的情况下以30滴答的速度运行旧代码,但是我可以看到一些小延迟,还没有测试新的代码,但是还没有超过30滴答。

0 个答案:

没有答案