zoukankan      html  css  js  c++  java
  • [UE4]时序问题

    时序问题

    有依赖关系的两段代码,执行时间不确定,所引起的问题。

    举例

    1、Shooter引用了Weapon,Weapon引用了Shooter。射击者需要持有枪,枪需要判断是否有主人(枪的持有者)。在枪要引用持有者的时候,可以使用Delay一段时间(1秒,甚至更短)在引用持有者就没问题了。

    2、UI引用Weapon。在UI中使用Weapon对象的时候,可能Weapon还没有创建出来,在UI中可以可以Delay一段时间(例如1秒,甚至更短时间都可以)等Weapon创建完成在引用Weapon

    3、UI计算Size。计算Size需要在UI被创建才能正确计算Size,也可以使用Delay延迟,等UI被创建之后再计算Size,这样才能得到正确的结果。

    解决时序问题的2个办法

    1、Delay

    2、明确调用顺序。在我们能够控制调用顺序的时候,可以采用这个办法。

    一、游戏主循环的“处理游戏逻辑”还可细分为上图所示的右侧循环步骤

    二、对所有Actor进行处理,不光是上图示的事件,可能还有其他的输入事件也是需要在“处理游戏逻辑”里面处理

    三、所有的Actor在处理过程中会发生变化,比如在某个Actor的Beginplay里面创建了另外一个Actor,那么待处理的Actor列表就+1了,那么新增的actor是不是在当前帧处理呢?这可是不一定的,这要看引擎的作者是怎么实现的,这并没有明确的规定。

    四、还有可能是Actor的销毁,Actor的销毁不会被立即释放,而是会在当前帧结束之后才被释放,

    五、假设2个Actor同时产生了,那么这2个Actor的Beginplay事件哪个先被执行呢?这个真是无法确定的。因此就会产生时序问题。

  • 相关阅读:
    win10如何安装应用商店
    Redis从入门到精通——认识 Redis
    SkyWalking——SkyWalking安装和配置
    SkyWalking——SkyWalking二次开发必备知识
    SkyWalking——SkyWalking架构设计
    SkyWalking——全面认识Apache SkyWalking
    Redis从入门到精通——初识NoSQL
    RocketMQ(4.8.0)——延迟消息机制
    RocketMQ(4.8.0)——事务消息机制
    RocketMQ(4.8.0)——Broker 的关机恢复机制
  • 原文地址:https://www.cnblogs.com/timy/p/10180505.html
Copyright © 2011-2022 走看看