Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

事件队列改进 #427

Open
XieRujian opened this issue Jan 15, 2023 · 6 comments
Open

事件队列改进 #427

XieRujian opened this issue Jan 15, 2023 · 6 comments

Comments

@XieRujian
Copy link

XieRujian commented Jan 15, 2023

随着功能丰富,原有事件队列出现如下问题:

  1. 伤害事件:由于回血和扣血的叠加,事件执行顺序的不同会对血量产生影响;
  2. 移动事件:由于移动事件的逻辑是直接瞬移到目的地,多次移动事件实际上只有最后一次有效。
    • 事实上,这样的设定会阻碍击退效果实现。

为此,我提出如下改进:

  1. 回合内只记录单位回合的总位移和血量增量,此过程不判定是否撞击障碍物;
  2. 回合结束时结算影响,此时判定是否死亡 / 血量移除 / 撞击障碍物。
@cylic14790382
Copy link

cylic14790382 commented Jan 16, 2023

移动事件可以按照血量的来设计,改成按照相对位移来移动,目前看是没有什么问题, 但缺点是可能要改tank类的TankMove逻辑

@cylic14790382
Copy link

cylic14790382 commented Jan 16, 2023

但是EndTick的设置,如果一个坦克在同一时间受到两次位移攻击,是不是不能判定第一次位移是否撞到障碍物(?)见 issue #400

@XieRujian
Copy link
Author

XieRujian commented Jan 16, 2023

是的,就像物体在一瞬间的受力情况一样,真正的加速度只与合力有关。
同样地,你并不需要知道物体受到单个速度后是否会撞击障碍物。

逻辑上确实要删除所有Move函数中的障碍物或边界判定。
我目前只能保证现有代码框架在执行中不受影响。

事实上,我觉得这一改动是功能丰富后的大势所趋,处理原有单位的移动机制只是时间问题。

@cylic14790382
Copy link

cylic14790382 commented Jan 16, 2023

很有道理,但其实TankMove删去判断障碍物那一行代码即可[捂脸]

@cylic14790382
Copy link

但是问一下为什么EndTick在Render这个函数里面,为什么不在Update里面,是我哪里理解错了吗(?)

@XieRujian
Copy link
Author

XieRujian commented Jan 16, 2023

(⊙ˍ⊙)!
加错了,但是Pull requests被Close了。

非常感谢您的提醒!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants