如题:
- 通过 initWithSpriteFrame 更新纹理会导致显示异常
initWithSpriteFrame中会调用initWithTexture,这时会重置
_opacityModifyRGB = true; _blendFunc = BlendFunc::ALPHA_PREMULTIPLIED;
但是texture相同时, 并不会调用**updateBlendFunc**方法。
setSpriteFrame是没问题,但是Widget的子类都没有提供方法改变纹理,如 ImageView 只有loadTexture 也是调用的 initWithSpriteFrame。
- 通过initWithSpriteFrame设置的Sprite无法 和initWithTexture 的Sprite(使用的是同一texture) 甚至 空Sprite 合并draw call。
var A = new cc.Sprite(); A.initWithSpriteFrame(frame); this.addChild(A); var b = new cc.Sprite(); A.addChild(b);
var A = new cc.Sprite(); A.initWithSpriteFrame(frame); this.addChild(A); var c = new cc.Sprite(); c.initWithTexture(frame.getTexture()); A.addChild(c);
如上两种情况都会出现draw call异常, 如果不使用initWithSpriteFrame则不会出现, 原因还没查,这对于大型游戏有很多层级嵌套的情况是非常难受的。