Exemplo n.º 1
0
        /// <summary>
        /// 加载图片失败递归重试
        /// </summary>
        /// <param name="image_path"></param>
        /// <param name="retryCount"></param>
        /// <param name="islocal"></param>
        /// <returns></returns>
        static async ETTask <Sprite> LoadImageOnline(this ImageOnlineComponent self, string image_path, int retryCount = 3, bool islocal = true)
        {
            if (retryCount <= 0)
            {
                return(null);
            }
            retryCount--;
            Sprite res;

            if (islocal)//先从本地取
            {
                res = await self.HttpGetImage(image_path, null, null, true);

                if (res != null)
                {
                    self.m_cacheOnlineSprite[image_path] = new ImageOnlineInfo
                    {
                        sprite    = res,
                        ref_count = 1
                    };
                    self.CallBackAll(image_path, res);
                    return(res);
                }
                Log.Debug("online_image_info path: " + image_path + " || msg:get img from local fail ");
            }
            // 从网上取
            res = await self.HttpGetImage(image_path);

            if (res != null)
            {
                self.m_cacheOnlineSprite[image_path] = new ImageOnlineInfo
                {
                    sprite    = res,
                    ref_count = 1
                };
                self.CallBackAll(image_path, res);
                return(res);
            }
            else
            {
                return(await self.LoadImageOnline(image_path, retryCount, false));// 失败重试
            }
        }
Exemplo n.º 2
0
 /// <summary>
 ///  获取线上图片精灵
 /// </summary>
 /// <param name="image_path">图片地址</param>
 /// <param name="callback">完成回调</param>
 /// <param name="reload">是否重新下载</param>
 public static async ETTask <Sprite> GetOnlineImageSprite(this ImageOnlineComponent self, string image_path, bool reload = false, Action <Sprite> callback = null)
 {
     if (!reload && self.m_cacheOnlineSprite.TryGetValue(image_path, out var value))
     {
         value.ref_count++;
         callback?.Invoke(value.sprite);
     }
     else if (self.callback_queue.TryGetValue(image_path, out var queue) && queue != null)
     {
         queue.Enqueue(callback);
     }
     else
     {
         self.callback_queue[image_path] = new Queue <Action <Sprite> >();
         self.callback_queue[image_path].Enqueue(callback);
         return(await self.LoadImageOnline(image_path, 3, !reload));//没有找到就去下载
     }
     return(null);
 }