Пример #1
0
        public T CreateLivePixel <T>(Vector2 pos, EnumCentre.BrushType type) where T : LivePixel, new()
        {
            //TODO...翻一下粒子类型回收池子,看看有没有该类型的回收池子
            //TODO...初始化这个粒子的数据
            //TODO...把该粒子放进堆里(这是还活着的状态的粒子)
            //TODO...返回这个粒子
            //Start...

            Stack <LivePixel> pool = null;

            dicPixelStackPool.TryGetValue(typeof(T), out pool);
            if (pool == null || pool.Count == 0)
            {
                //什么??没有这个类型的粒子回收池子或者回收池子里没有死掉的粒子
                //那就再生一个粒子
                pixel = new T();
            }
            else
            {
                //哈哈哈哈这个类型的回收池子里有死掉的粒子,拿出来,要活的!!!
                pixel        = pool.Pop();
                pixel.isDead = false;
            }


            //初始化
            pixel.position     = pos;
            pixel.renderWStart = pallettePrevData.prevRenderStartEndW.x;
            pixel.renderHStart = pallettePrevData.prevRenderStartEndH.x;
            pixel.renderWEnd   = pallettePrevData.prevRenderStartEndW.y;
            pixel.renderHEnd   = pallettePrevData.prevRenderStartEndH.y;

            pixel.color = dicObjectPixel[type].color;

            //放进活跃堆里
            AddToStack(pixel, pixel.x, pixel.y);

            pixel.Start(this);    //可能会增加GC?


            //返回
            return(pixel as T);
        }
 public void SetBrush(EnumCentre.BrushType brush)
 {
     this.brush = brush;
     ChangeBrush();
 }