C#开发的OpenRA游戏之网络接收后找到游戏对象
OpenRA游戏里,从网络接收到数据包之后,
就需要反序列化这个数据包,然后拆出来各个字段的数据,
再从各个字段里找到对应的信息,再把这个动作交给游戏世界里的对象执行。
从前面分析可知,要找到游戏世界里的对象,就需要游戏对象的ID,
如下代码:
Actor subject = null;
if (flags.HasField(OrderFields.Subject))
{
var subjectId = r.ReadUInt32();
if (world != null)
TryGetActorFromUInt(world, subjectId, out subject);
}
在这里首先判断返回的数据包是否有这个Subject字段,如果有这个字段,
就开始读取一个32位的ID,再通过这个ID到游戏世界里找到游戏对象。
TryGetActorFromUInt(world, subjectId, out subject)就是实现从游戏世界里找到游戏对象,并保存在变量subject。
这样就完成找到游戏对象,后面接着传送给命令对象Order:
Order(order, subject, target, targetString, queued, extraActors, extraLocation, extraData, groupedActors)
命令对象就拿本地游戏对象,为后面执行命令准备好了。
接着下来,就是怎么样让游戏对象执行命令了,主要在下面函数里执行: