/// <summary>
    /// Load the specified imageurl, textIndex and callbackDelegate.
    /// load for nocache
    /// </summary>
    /// <param name="imageurl">Imageurl.</param>
    /// <param name="textIndex">Text index.</param>
    /// <param name="callbackDelegate">Callback delegate.</param>
    public IEnumerator Load(string imageurl, uint textIndex, DelegateSpriteCallMethod callbackDelegate)
    {
        double startTime = (double)Time.time;
        //请求WWW
        WWW www = new WWW(imageurl);

        yield return(www);

        if (www != null && string.IsNullOrEmpty(www.error))
        {
            //最多等5s...
            int maxTimeout = 5;
            while (!www.isDone)
            {
                yield return(new WaitForSeconds(1));

                maxTimeout--;
                if (maxTimeout <= 0)
                {
                    yield break;
                }
            }

            //获取Texture
            Texture2D texture = www.texture;

            //创建Sprite
            Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));

            //image.sprite = sprite;,for cache...
            if (false == dicSpriteList.ContainsKey(imageurl))
            {
                dicSpriteList.Add(imageurl, sprite);
            }

            //?...为啥不能正常回调啊啊啊...
            if (callbackDelegate != null)
            {
                callbackDelegate(sprite, textIndex);
            }
            else
            {
                ImageLoadEvent messageEventArgs = new ImageLoadEvent(imageurl, sprite);
                enqueueToMessageEventQueue(messageEventArgs);
            }

            startTime = (double)Time.time - startTime;
            Debug.Log("WWW加载用时:" + startTime);
        }
    }
Beispiel #2
0
        public void it_should_raise_OnEvent_for_kernel_trace()
        {
            var called = false;

            var trace = new KernelTrace();
            var proxy = new Proxy(trace);

            var provider = new ImageLoadProvider();

            provider.OnEvent += e => { called = true; };

            trace.Enable(provider);
            proxy.PushEvent(ImageLoadEvent.CreateRecord(123, "file.exe"));

            Assert.IsTrue(called, "proxy call raised on event");
        }
    /// <summary>
    /// 以WWW方式进行加载,add cache..
    /// </summary>
    public void StartSpriteLoad(string imageurl, uint textIndex, DelegateSpriteCallMethod callbackDelegate)
    {
        if (dicSpriteList.ContainsKey(imageurl))
        {
            if (callbackDelegate != null)
            {
                callbackDelegate(dicSpriteList[imageurl], textIndex);
            }
            else
            {
                ImageLoadEvent messageEventArgs = new ImageLoadEvent(imageurl, dicSpriteList[imageurl]);
                enqueueToMessageEventQueue(messageEventArgs);
            }
            return;
        }

        StartCoroutine(Load(imageurl, textIndex, callbackDelegate));
    }
 private void EmitEvent(ImageLoadEvent ev)
 {
     if (!handlers.ContainsKey(ev.name))
     {
         return;
     }
     foreach (Action <ImageLoadEvent> handler in this.handlers[ev.name])
     {
         try{
             handler(ev);
         } catch (Exception ex) {
                             #if SOCKET_IO_DEBUG
             debugMethod.Invoke(ex.ToString());
                             #endif
             Log.info(ex.ToString());
         }
     }
 }
Beispiel #5
0
 public virtual void Visit(ImageLoadEvent ev)
 {
 }
 private void enqueueToMessageEventQueue(ImageLoadEvent e)
 {
     //lock (_forMessageEventQueue)
     //coroutine not need lock..
     eventQueue.Enqueue(e);
 }