gpt4 book ai didi

javascript - 游戏如何删除数据库中的对象但同时将其动画化

转载 作者:数据小太阳 更新时间:2023-10-29 04:21:08 25 4
gpt4 key购买 nike

我想知道当您执行诸如删除项目之类的操作时,动画之类的异步操作是如何工作的,因此想出了这种思考过程,并希望得到反馈,看看从行业最佳实践的 Angular 来看它是否有意义。

有两层:

  • react 层。
  • 渲染层。

react 层立即发生,可以通过传统的事件调度完成。

这是您创建和删除数据的地方,这一切都是即时发生的。

状态机会收到这些即时 react 变化的通知。

然后状态机“转换”。这个过程会在一段时间内发生,假设有一些异步的事情发生(动画、网络请求等)。这就是人们所说的“操作队列”的意思。

然后渲染层从 Action 队列中取出东西并渲染它。通过这种方式,对底层即时 react 层有某种延迟 react 。

我的问题是 react 层是否也需要处理异步。例如,删除一些东西。

比如说一个项目被删除了,你想把它动画出来。有几种方法可以做到这一点:

  1. 排队删除操作,然后先将其动画化。动画完成后,再进行实际的删除。如果动画中断(取消删除),则永远不会执行删除。
  2. 立即删除项目( react 层)。动画层保留对周围项目的引用,因此即使从全局位置将其删除,它仍然可以执行其动画。如果动画被取消,那么您将不得不执行更复杂的“撤消”操作。

如果 (1) 是要走的路,那么就没有反应层,并且一切都是通过一种 Action 队列来实现的。这使得制作可重用代码变得更加困难,因为一切都与 Action 队列思想相关。

如果(2)是要走的路,那么数据有两个副本,全局副本和本地副本,它们以异步方式保持同步。这使得拥有可重用代码变得更加容易,但也使推理变得更加复杂。

想知道这是否有意义,以及这些方法中的任何一种是否是行业中更好的做法(或者是否有我没有提到的更有意义的替代方法)。

换句话说,主要有两种方式:

  1. Eager:现在删除它,好的,我们已经删除了它,是时候回到里面了。并等待一切都恢复正常并称其为“完成”。
  2. 谨慎:宣布“我们要删除它”,然后等到一切都完成并返回内部进行实际删除。

想知道游戏和应用等如何处理这类事情。

更新

换个 Angular 想,也许更像是海带在海里的摇曳:

https://www.youtube.com/watch?v=gIeLCzR8EgA

我的意思是,有一个直接的基础层(创建/删除),然后有一些中间层,其中包含所有发生的事务(创建/删除)的副本,渲染层用于动画创建/删除。所以原始数据始终是同步的,但渲染层使用一种旧版本的数据,其中包含所有发生的变化链。

react 层 -> 事务层 -> 渲染层。

另一个选项是标记为删除,然后只有在动画完成后才真正删除,但这看起来很老套。

更新

另一个版本:

  • 响应式版本
    • 始终拥有最新数据。 (一)
  • 渲染版本
    • 有最后的数据 (b),加上导致 (a) 的变化链。
    • 渲染完成后,它会将更改应用于 (b),因此最终它类似于 (a)。

最佳答案

根据我作为 Unity 游戏开发人员的经验,正确的决定是在中间,至于游戏引擎中的物理是近似的,因为事物半完美的感觉很像完美。

解释是因为您的目标越现实和真实,您就越需要资源,不仅是 CPU 和 GPU,还有现金。

在我为标志选项引用了这个奇怪的序言之后,应用的方法与普通的 Garbade 收集器没有太大区别,您标记一个不再有用的项目,当垃圾收集器出现时,他释放了该对象使用的 ram 空间,所以这个新空间可以重复使用。

同样的过程由很多引擎完成,销毁操作附加在渲染计算之前。

最终目标始终是达成良好的中间解决方案。

有可能在引擎计算过程的每时每刻都强制立即销毁,但这种解决方案总是被弃用。

对于动画,您通常使用的方式是在动画结束时或在最后几帧中销毁(设置要销毁的标志)。至少你可以使用一些技巧让淡入淡出更有趣(比如粒子)。

真正的问题是当你必须通过网络销毁对象时(多人游戏),在这种情况下你必须建立什么是更容易参与的机器并选择它来计算物理和交互,这台机器总是服务器或至少是主机(取决于游戏类型)。

我知道这个问题被标记为 javascript 问题,但我还是忍不住要回答。

我还附上了关于 Destruct 函数的统一文档中的一页,解释了他们如何设法从游戏环境中删除项目:

https://docs.unity3d.com/ScriptReference/Object.Destroy.html

祝你有美好的一天!和良好的编码。

关于javascript - 游戏如何删除数据库中的对象但同时将其动画化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48636204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com