CustomImage.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. cc.Class({
  2. extends: cc.BaseClass,
  3. properties: {
  4. m_spImage:cc.Sprite,
  5. m_defFrame: cc.SpriteFrame,
  6. },
  7. ctor: function () {
  8. this.m_szUrl = '';
  9. },
  10. _InitDefault:function(){
  11. this.m_szUrl = '';
  12. if(this.m_spImage){
  13. //保存初始图片和尺寸
  14. if(this.m_defSize == null) this.m_defSize = this.m_spImage.node.getContentSize();
  15. //还原默认图片
  16. if(this.m_defFrame) this.m_spImage.spriteFrame = this.m_defFrame;
  17. else this.m_spImage.spriteFrame = null;
  18. }
  19. },
  20. SetImageSpriteFrame: function (spriteFrame) {
  21. this._InitDefault();
  22. this.m_spImage.spriteFrame = spriteFrame;
  23. },
  24. SetImageUrl: function (szUrl, cbRecount, bshow) {
  25. this._InitDefault();
  26. this.m_szUrl = szUrl
  27. this.m_cbRecount = -1;
  28. if(cbRecount)this.m_cbRecount = cbRecount;
  29. return true;
  30. },
  31. update: function () {
  32. if(this.m_szUrl!='') this._load(this.m_szUrl);
  33. },
  34. // 加载图片
  35. _load: function () {
  36. //加载中
  37. if( g_GlobalUserInfo.m_NetImageMap[this.m_szUrl] == 'Loading') return;
  38. //无效URL 或 加载异常
  39. if( g_GlobalUserInfo.m_NetImageMap[this.m_szUrl] == 'err') {
  40. if(this.m_Hook.onImageLoadErr) this.m_Hook.onImageLoadErr();
  41. this.m_szUrl = '';
  42. return;
  43. }
  44. if (cc.sys.localStorage.getItem(AndroidBUG)) this.m_szUrl = this.m_szUrl.replace('https', 'http');
  45. //第一次加载 或 加载完成直接使用
  46. if( g_GlobalUserInfo.m_NetImageMap[this.m_szUrl] == null){
  47. g_GlobalUserInfo.m_NetImageMap[this.m_szUrl] = 'Loading';
  48. this._onLoadImg(this.m_szUrl);
  49. }else {
  50. this._onLoadFinish();
  51. }
  52. },
  53. //加载
  54. _onLoadImg:function(Url){
  55. var imgUrl = Url + 'png';
  56. if(cc.sys.localStorage.getItem(AndroidBUG)) imgUrl = imgUrl.replace('https','http');
  57. cc.assetManager.loadRemote(imgUrl, function(err, texture){//
  58. if(err) return this._onLoadError(err, Url);
  59. g_GlobalUserInfo.m_NetImageMap[Url] = new cc.SpriteFrame(texture);
  60. if(Url == this.m_szUrl) this._onLoadFinish();
  61. }.bind(this));
  62. },
  63. //成功加载
  64. _onLoadFinish: function () {
  65. this.m_spImage.spriteFrame = g_GlobalUserInfo.m_NetImageMap[this.m_szUrl];
  66. this.m_szUrl = '';
  67. //this.node.setContentSize(this.m_defSize);
  68. },
  69. //加载出错
  70. _onLoadError: function (err, Url) {
  71. try {
  72. if (window.LOG_NET_DATA) console.log(" image _onLoadError : [" + this.m_cbRecount + "] : " + this.m_szUrl + "err :" + err);
  73. } catch (error) {}
  74. //android 5.0 加载https 失败
  75. if (this.m_szUrl.indexOf('https') >= 0) cc.sys.localStorage.setItem(AndroidBUG, 1);
  76. if (this.m_cbRecount == -1) return this._onLoadImg(this.m_szUrl);
  77. if (this.m_cbRecount > 0) {
  78. // 重新加载
  79. this.m_cbRecount--;
  80. this._onLoadImg(this.m_szUrl);
  81. } else {
  82. this.m_szUrl = '';
  83. if (this.m_Hook && this.m_Hook.onImageLoadErr) this.m_Hook.onImageLoadErr();
  84. }
  85. },
  86. });