我正在尝试为MMO游戏制作一个架构,我无法弄清楚如何在游戏对象中存储尽可能多的变量而没有很多调用在我更新它们的同时在线上发送它们.
我现在拥有的是:
Game::ChangePosition(Vector3 newPos) {
gameobject.ChangePosition(newPos);
SendOnWireNEWPOSITION(gameobject.id, newPos);
}
Run Code Online (Sandbox Code Playgroud)
它使代码变得垃圾,难以维护,理解和扩展.想想一个冠军的例子:
我必须为每个变量创建很多函数.这只是这个冠军的概括,我可能每个冠军类型/"类"都有1-2个其他成员变量.
如果我能从.NET或类似的东西中获得OnPropertyChange,那将是完美的.我想要的架构可以很好地工作,如果我有类似的东西:
对于HP:当我更新它时,自动呼叫 SendFloatOnWire("HP", hp);
对于位置:当我更新它时,自动调用 SendVector3OnWire("Position", Position)
对于名称:当我更新它时,自动调用 SendSOnWire("Name", Name);
什么是完全相同SendFloatOnWire,SendVector3OnWire,SendSOnWire?在char缓冲区中序列化这些类型的函数.
或方法2(优先),但可能很昂贵
更新Hp,正常定位,然后每个网络线程勾选扫描服务器上所有已更改变量的GameObject实例并发送它们.
如何在高规模的游戏服务器上实现,我有哪些选择?这类案件有用吗?
宏会变得有用吗?我想我已经开发了类似的一些源代码,我认为它使用了宏.
先感谢您.
编辑:我想我找到了一个解决方案,但我不知道它实际上有多强大.我打算去看看,然后看看我的立场.https://developer.valvesoftware.com/wiki/Networking_Entities
我想制作一个像任何网站中使用的布局 - 标题,侧边栏和页脚保持不变,但中心部分.我有多个页面/窗口在wpf混合C#应用程序中显示,它们完全不同.例如,stackoverflow具有主页的布局和每个问题的另一个布局.这是另一个例子:

我必须在之前的项目中执行此操作并使用单个网格布局然后,对于每个页面,我必须隐藏()所有这些并显示每个顶部 -
有什么诀窍?如何在wpf应用程序中执行相同的操作?在一个典型的C#应用程序中,我每次都必须打开一个子窗口,但这些日子看起来很难看.
先感谢您!
如何从 nuxtjs 服务器中间件获取 POST 数据?到目前为止,我已经成功地为 GET 做到了这一点,但对于 POST 来说,正文不存在。req.body未定义。
我有几个简单的课程,我无法让他们工作.
TL; DR我有一个"播放器"实例,在我将一些数据设置到实例后,我可以将其恢复.如果我将实例推送到std :: vector Players; 如果我有Players.at(0).getName()则返回"".数据不存在!离开了.(调试应用程序,我在"vPlayer"和"Players"中设置"_name",我看到一个元素,"_ name"="")
这是代码:
//Player.h
#ifndef PLAYER_H
#define PLAYER_H
#include <iostream>
class Player
{
public:
Player();
Player(const Player &Player);
Player& operator=(const Player &Player);
std::string getName();
bool setName(const std::string &name);
bool nameValid(const std::string &name);
private:
std::string _name;
};
#endif
//Player.cpp
#include "Player.h"
#include <iostream>
#include <string>
using namespace std;
Player::Player()
{
}
Player::Player(const Player &Player)
{
}
Player& Player::operator=(const Player &Player) {
return *this;
}
std::string Player::getName()
{
return this->_name;
}
bool Player::setName(const std::string &name) …Run Code Online (Sandbox Code Playgroud)