c# - 列出记录播放器动作
问题描述
我目前正在尝试测试我所拥有的 3D 概念,该概念涉及使用“过去的自我”或玩家的克隆来完成关卡。
我的第一个想法是只记录变换位置并相应地移动克隆,但这不允许您与过去的自我互动并产生悖论(这是您无法通过关卡的方式之一)
所以我需要记录玩家的输入(左、右、抓取、跳跃和蹲下),然后在玩家的克隆上实例化它们,该克隆只会播放记录列表中的输入,而不是键盘。唯一的问题是我仍在努力掌握列表,所以我需要有关如何添加到列表的帮助。
CloneMovement(bool Jump,bool Crouch, bool Left, bool Right, bool Grab, bool Check)
解决方案
创建和添加到列表非常简单。
创建列表:
List<float> listOfFloats = new List<float>();
尖括号中的数据类型可以是任何类型,例如List<Vector3>
或List<MyCustomClass>
。重要的是列表只能保存一种数据类型的对象或值。你不能有一个包含整数、字符串和布尔值的列表。
添加到列表:
listOfFloats.Add(10f);
从列表中删除:
listOfFloats.Remove(10f); // this will remove the FIRST 10f value it finds
listOfFloats.RemoveAll(10f) // this remove all 10f values
Remove 方法也有返回值是毫无价值的。他们将返回他们删除的值、对象或列表。
现在,重要的是……列表可能不是解决您的问题的最佳集合类型。
您正在处理一系列事件。事件按顺序发生,除非该顺序需要是可变的,否则您最好使用队列。
使用队列,您始终知道队列中的第一项是添加到队列中的第一个项目。因此,如果您从头到尾遍历队列,您将按顺序读取内容。
注意:如果您真的想知道如何记录一系列事件并在以后的某个任意时间以正确的顺序和正确的时间回放。这是一个非常非常大的问题需要回答。
推荐阅读
- apache-camel - Apache Camel文件端点:Camel测试调用直接组件路由将文件从文件夹A复制到文件夹B
- python - .split() 与 json 文件返回 keyerror
- typescript - 使用 TypeScript 的 CreateJS
- r - 使用 dplyr 在数据框中的每个组的开头添加一行
- javascript - 为 React 钩子更新 Javascript 对象中的属性的最有效方法
- excel - 如何计算 Excel 中两个 ISO 8601 日期时间之间的秒数?
- javascript - 保存和恢复 Chrome 扩展中多个复选框的检查状态
- c# - 将 DomainDbContext 与 IdentityDbContext 解耦
- python-3.x - Gurobi:在目标函数中添加对数项和指数项?
- python - 你如何在应用程序之间使用 ManyToManyFields 而不产生循环导入?