5

libgdx弹窗action处理

 3 years ago
source link: https://www.zenlife.tk/libgdx-dialog-action.md
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

libgdx弹窗action处理

2014-03-05

libgdx中弹窗出来和收回的动画效果一般是用自带的action系统做的,要把这个东西做到不犯错还真不容易。把我自己容易踩到的坑记录一下,避免以后继续踩。

  1. 加了action却没有弹窗动作

这种情况很可能是add进group之前,把action给clear掉了。很容易不小心就是先加了一遍action,结果在加到group中之前又给clear掉了。

弹出动作处理正确顺序是:

  • 清除掉dialog之前的action(保险)
  • 执行dialog的回调,回调函数中添加action
  • 将dialog添加到group中
  • 重复上次弹窗收回未执行完的动作

这种情况发生的大多是收回没处理好。比较保守的做法是在弹出之前先clear一下action,防止有上次还没运行完的action继续执行。

还要特别注意,谁分配谁释放的原则–很可能action不是加在dialog中的,而是加到了dialog里的东西中的。那么一定要在dialog自己的收回的回调函数中消除。

  1. 没有从group中remove就清除掉action导致崩溃

action的工作原理是在actor的act函数中调用,并且如果action完成时,会调用remov清除掉这个action。如果手动remove掉了action,而actor还在act,那么当action执行完时会再remove,remove两次导致崩溃。

  1. 正确的收回处理

收回的动作比弹出还要容易出错一些。主要是要在action执行完之后才可以其它的代码。正确的处理流程应该是:

  • 将hide之后要执行的运行封装到一个runnable里面
  • 执行dialog的回调函数,添加action
  • Actions.sequence执行现在的action,然后是run中remove掉dialog并执行那个runnable

主要是action跟runnable交织在一起了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK