我对"过山车大亨"和"模拟人生"以及FPS游戏等应用程序的性能着迷.我想了解更多有关基本应用程序架构的信息.(不是那么关心用户界面 - 我假设MVC/MVP原则适用于此.此时我也不关心数学和物理.)
我的主要问题涉及模拟中的数十个或数百个单独的对象(人,车辆,物品等),这些对象都会移动,做出决策,提出并响应事件 - 看起来都是同一时间,以及它们是如何形成的为这种良好的性能而设计.
问:首先,这些对象是在一个巨大的循环中处理,一次一个 - 或者每个对象处理它自己的线程?在这样的模拟中有多少线程是实用的?(球场图当然是10,100,1000)
我不打算写游戏,我只是想要设计理论,因为我想知道这样的设计是否可以应用于其他似乎同时做出几个决策的应用程序.
有两种基本方法可以进行基于Agent的仿真和系统动力学.在基于代理的模拟中,游戏中的每个实体都将由具有属性和行为的类的实例表示,实体之间的所有交互都必须明确定义,当您希望这些实体交互时,函数会被称为属性交互实体的变化.
系统动力学完全不同,它只处理总和和总数,系统中没有单个实体的表示.最简单的例子是Predator和Prey模型.
这两者都有优点和缺点,系统动力学方法可以更好地扩展到大量的权限,同时保持运行时间短.虽然您必须计算多个公式,但计算时间与公式中的值无关.但是在这种方法中没有办法看待单个实体.基于代理的方法允许您将实体放在特定位置,并允许您与模拟中的特定实体进行交互.
FSM和Celular自动机是如何在游戏中模拟系统的其他方式.例如,在基于代理的方法中,您可以使用FSM对一个代理的行为进行建模.Simcity使用Celular自动机进行一些模拟工作.
一般情况下,您可能没有一个巨大的模型可以执行除了执行特定任务的多个系统之外的所有内容,其中一些不需要经常更新,例如确定天气的某些内容,其他可能需要不断更新.即使您将它们放在单独的线程中,您也需要在需要时暂停或启动它们.您可能希望在多个帧上拆分工作,例如,仅计算特定数量的代理程序的更新.