Project1

标题: 请问,addChild 和 addWindow 有什么区别? [打印本页]

作者: daiboy12    时间: 2018-4-25 16:33
标题: 请问,addChild 和 addWindow 有什么区别?
原先以为两者功能是一样的,直到今天尝试了一下窗口之间的覆盖,才发现使用addWindow的话即时上面的窗口有透明度也会盖住下面的窗口,而addChild就不会这样。那么两者之间为什么会产生这种差异?
作者: ekmomo    时间: 2018-4-26 12:48
本帖最后由 ekmomo 于 2018-4-26 12:52 编辑

JAVASCRIPT 代码复制
  1. Scene_Base.prototype.addWindow = function(window) {
  2.     this._windowLayer.addChild(window);//这里
  3. };


一、本质上讲
addwindow是在场景对象的_windowLayer属性下addChild。
addChild是PIXI.js原生方法,它需要一个stage(PIXI.Container构造的对象)来放置精灵,而_windowLayer就是一个stage。

二、按照MV本身的开发规范
addwindow顾名思义是添加window对象的,window对象除了包含PIXI.Sprite的prototype还应当在Window_Base的原型链上。
而addChild就不然,你可以直接添加精灵(PIXI.Sprite构造出来的对象)到场景中去。

三、Scene本身也是一个stage 只不过它包含了自己的属性和方法
JAVASCRIPT 代码复制
  1. Scene_Base.prototype.initialize = function() {
  2.     Stage.prototype.initialize.call(this);//这里
  3.     this._active = false;
  4.     this._fadeSign = 0;
  5.     this._fadeDuration = 0;
  6.     this._fadeSprite = null;
  7.     this._imageReservationId = Utils.generateRuntimeId();
  8. };


JAVASCRIPT 代码复制
  1. Stage.prototype.initialize = function() {
  2.     PIXI.Container.call(this);//这里
  3.  
  4.     // The interactive flag causes a memory leak.
  5.     this.interactive = false;
  6. };


四、建议
在不了解绘图机制的情况下尽量多使用addWindow,少量使用addChild,避免直接addChild到Scene,并避免使用drawImage。
可以参考YEP的CTB系统里ICON的绘制,而MOG大多是反面教材……
作者: daiboy12    时间: 2018-4-26 17:54
ekmomo 发表于 2018-4-26 12:48
Scene_Base.prototype.addWindow = function(window) {
    this._windowLayer.addChild(window);//这里
}; ...

感谢解答!直接也阅读过您在别的帖子回复的回答,非常详尽,让我学习到很多!
作者: 汪汪    时间: 2018-4-27 00:36
addwindow就是添加到窗口层中,主要效果就是会相互遮盖。
当然,也可以加sprite。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1