关于Sprite类的2个优化建议

版本:cocos2d-js v3.6

  1. 在c++ ,Sprite的draw函数里面没有对_texture 是否为null判断,是否可以加上这个判断以保证程序最基本的稳定? 如:js里面 var sp = new cc.Sprite(filepath); 如果filepath 路径的文件不存在,程序直接crash连商量的余地都没有,唯一办法就是用之前判断文件是否存在然后设置。

  2. Sprite的setTexture的bug。 这种情况按理应该非常常见,使用场景:界面有个Sprite,创建的时是用SpriteFrame类来显示,后面程序要手动修改,用setTexture(filepath)方法来修改显示,(首先确保SpriteFrame用的textureOriginalSize跟filepath指向的PNG尺寸一致,如果不一致则没法测试这个问题) 我遇到的问题是,setTexture之后,总会出现几个像素的偏差,看了源代码调试后了解,SpriteFrame通常都会有offset,setSpriteFrame 时,Sprite的protected属性 _unflippedOffsetPositionFromCenter 保存了这个offset值。但是 当我们setTexture , _unflippedOffsetPositionFromCenter 值没有重置。 如果你查找下,就注意这个属性只会在setSpriteFrame时做修改, setTexture函数内部依旧会拿这个参数来使用,显然这是不合理的。偏差也是因此产生。

希望下个版本能把这种问题fix,如有类似疑问,欢迎交流

下图是我的改动截图,亲测

2的时候 可以用setSpriteFrame吧

可以用,但是不能说不让用setTexture吧

Sprite 这个确实是这样的,我之前Sprite 换图的 问题,也是我自己搞定的。响应有点慢啊。