Games104第2节记录

Games104第2节记录

三月 22, 2022

如何构建游戏世界

如何让游戏世界活起来

将物体变成GO( Game Object)

动态物体

在这里插入图片描述

静态物体

在这里插入图片描述

环境

​ 天空,地形,植被

在这里插入图片描述

其他物体

​ 空气墙,规则

image-20220330164946213

如何去描述虚拟世界的物体

将物体的属性和行为封装在一起,成为一个对象。

假如但有两个功能时我怎么处理

Component

每一个Component类都需要一个tick()函数

多功能物体我们用组合方法来解决。

在这里插入图片描述

在这里插入图片描述

怎么让游戏动起来

进行单个系统进行tick()。

在这里插入图片描述

一个一个系统进行tick,而不是一个物体一个物体进行tick,这样的架构会更高效

如何在游戏引爆炸弹

事件

如果写在一个爆炸类里用switch判断,随着系统的复杂类会越来越大。变得不可调试。爆炸类只需要将这给消息传给其他组件让其他类添加相关方法。

如何管理Game Object

Scene Management

每一个物体都需要一个特别的UID

每个物体都需要一个位置

简单的空间分割

不需要划分

物体较少的情况下直接遍历

优点:特别简单,无脑

缺点:但物体多就效率低

进行网格划分

对格子进行编号,发生事件找邻近格子的部分物体

优点:对比上一种方法能减轻弊端

缺点:对于空间不均匀不适用

四叉树

对目标块不断的划分。

在这里插入图片描述

空间数据管理

最常用的是BVH方法。

在这里插入图片描述

小结

一切都是对象

游戏对象可以用基于组件的方式来描述

游戏对象的状态会在tick循环中更新

游戏对象是通过有效的策略在场景中管理的

物体tick的先后顺序

多线程通信问题,当你访问其他线程时先通过一个邮局,然后由邮局统一相互发送消息。保证时序一定一致。比如你的精彩时刻是记录玩家的输入,如果是多核执行可能导致结果不一样。