eva-engine / eva.js

Eva.js is a front-end game engine specifically for creating interactive game projects.
https://eva.js.org
MIT License
1.75k stars 108 forks source link

feat: executionOrder #177

Closed SLI97 closed 2 years ago

SLI97 commented 2 years ago

Please check if the PR fulfills these requirements

What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)

What is the current behavior? (You can also link to an open issue here)

What is the new behavior (if this is a feature change)?

Does this PR introduce a breaking change? (What changes might users need to make in their application due to this PR?)

Other information:

SLI97 commented 2 years ago

通过executionOrder设置组件执行优先级,控制同一GameObject下组件的生命周期执行顺序

fanmingfei commented 2 years ago

只有AB的时候 A要在B前面 只有BC的时候 B要在C前面 只有AC的时候C要在A前面 该怎么办

SLI97 commented 2 years ago

C做基类,D和E做子类,DE分别设置executionOrder

fanmingfei commented 2 years ago

是不是在添加组件的时候设置位置会更加灵活一些 类似pixi addChildAt

SLI97 commented 2 years ago

这样有一点不好:例如一些系统内置组件,例如粒子组件等,可能组件希望在粒子组件的update里时刻获取transform组件update之后的信息,我会把他的executionOrder设置为100等极高的值。在这种情况下添加自定义组件的时候就必须时刻关注该内置组件的在components数组里的位置。

fanmingfei commented 2 years ago

这样有一点不好:例如一些系统内置组件,例如粒子组件等,可能组件希望在粒子组件的update里时刻获取transform组件update之后的信息,我会把他的executionOrder设置为100等极高的值。在这种情况下添加自定义组件的时候就必须时刻关注该内置组件的在components数组里的位置。

是不是可以用lateUpdate

fanmingfei commented 2 years ago

如果在编辑器里面想随时调整自定义组件的顺序 需要怎么办

SLI97 commented 2 years ago

这样的话需要重写整个组件调用的逻辑。首先编辑器的顺序由components数组体现,然后通过addComponent时,components执行push就好,由另外的模块(gameObject上添加新的组件调度器)根据executionOrder对新添加的组件进行排序,而且之后由这个模块执行组件生命周期(代替原来的遍历components数组)

fanmingfei commented 2 years ago

addComponentAt呢?这种方法不好的一点就是在手撸代码的情况下不知道具体应该插在哪里,那就再提供一个addComponentAfter(Image, newComponent) 这样来添加到某个组件后面? 同样也要有Before

terrykingcha commented 2 years ago

需要控制组件优先级执行顺序的具体需求或场景是什么?

terrykingcha commented 2 years ago

功能有待尚缺,暂时关闭这个issue