示例#1
0
        public LPixmap SetTileBackground(LPixmap image, bool isReturn)
        {
            if (image == null)
            {
                return(null);
            }
            int     layerWidth  = GetWidth();
            int     layerHeight = GetHeight();
            int     tileWidth   = image.GetWidth();
            int     tileHeight  = image.GetHeight();
            LPixmap tempImage   = new LPixmap(layerWidth, layerHeight, false);

            for (int x = 0; x < layerWidth; x += tileWidth)
            {
                for (int y = 0; y < layerHeight; y += tileHeight)
                {
                    tempImage.DrawPixmap(image, x, y);
                }
            }
            if (isReturn)
            {
                return(tempImage);
            }
            SetBackground(tempImage.Texture);
            return(null);
        }
示例#2
0
        /// <summary>
        /// 判定指定的两张图片之间是否产生了碰撞
        /// </summary>
        ///
        /// <param name="src"></param>
        /// <param name="x1"></param>
        /// <param name="y1"></param>
        /// <param name="dest"></param>
        /// <param name="x2"></param>
        /// <param name="y2"></param>
        /// <returns></returns>
        public bool isPixelCollide(LPixmap src, float x1, float y1, LPixmap dest,
                                   float x2, float y2)
        {
            float width1 = x1 + src.GetWidth() - 1, height1 = y1 + src.GetHeight()
                                                              - 1, width2 = x2 + dest.GetWidth() - 1, height2 = y2
                                                                                                                + dest.GetHeight() - 1;
            int xstart = (int)Loon.Utils.MathUtils.Max(x1, x2), ystart = (int)Loon.Utils.MathUtils.Max(y1, y2), xend = (int)Loon.Utils.MathUtils.Min(width1, width2), yend = (int)Loon.Utils.MathUtils.Min(height1, height2);
            int toty = Loon.Utils.MathUtils.Abs(yend - ystart);
            int totx = Loon.Utils.MathUtils.Abs(xend - xstart);

            for (int y = 1; y < toty - 1; y++)
            {
                int ny  = Loon.Utils.MathUtils.Abs(ystart - (int)y1) + y;
                int ny1 = Loon.Utils.MathUtils.Abs(ystart - (int)y2) + y;
                for (int x = 1; x < totx - 1; x++)
                {
                    int nx  = Loon.Utils.MathUtils.Abs(xstart - (int)x1) + x;
                    int nx1 = Loon.Utils.MathUtils.Abs(xstart - (int)x2) + x;
                    try
                    {
                        if (((src.GetPixel(nx, ny) != LSystem.TRANSPARENT)) &&
                            ((dest.GetPixel(nx1, ny1) != LSystem.TRANSPARENT)))
                        {
                            return(true);
                        }
                    }
                    catch (Exception e)
                    {
                        Log.Exception(e);
                    }
                }
            }
            return(false);
        }
示例#3
0
 public static Polygon MakePolygon(LPixmap image)
 {
     if (image == null) {
         throw new RuntimeException("Image is null !");
     }
     return MakePolygon(image.GetPixels(), image.GetWidth(),
             image.GetHeight());
 }
示例#4
0
 public static LTexture.Mask CreateMask(LPixmap image)
 {
     if (image == null) {
         throw new RuntimeException("Image is null !");
     }
     return CreateMask(image.GetPixels(), image.GetWidth(),
             image.GetHeight());
 }
示例#5
0
 public static LTexture.Mask CreateMask(LPixmap image)
 {
     if (image == null)
     {
         throw new RuntimeException("Image is null !");
     }
     return(CreateMask(image.GetPixels(), image.GetWidth(),
                       image.GetHeight()));
 }
示例#6
0
 public static Polygon MakePolygon(LPixmap image)
 {
     if (image == null)
     {
         throw new RuntimeException("Image is null !");
     }
     return(MakePolygon(image.GetPixels(), image.GetWidth(),
                        image.GetHeight()));
 }
示例#7
0
 public PackEntry(LPixmap image)
 {
     this.image = image;
     if (image != null)
     {
         this.fileName = image.GetPath();
         this.width    = image.GetWidth();
         this.height   = image.GetHeight();
     }
 }
示例#8
0
        private void InitDesktop()
        {
            if (desktop != null && sprites != null)
            {
                return;
            }
            this.desktop = new Desktop(this, GetWidth(), GetHeight());
            this.sprites = new Sprites(GetWidth(), GetHeight());
            if (dialog == null)
            {
                LPixmap g = new LPixmap(GetWidth() - 20,
                                        GetHeight() / 2 - 20, true);
                g.SetAlphaValue(0, 0, 0, 125);
                g.FillRect(0, 0, g.GetWidth(), g.GetHeight());
                g.Dispose();
                dialog = g.Texture;
                g      = null;
            }
            this.message = new LMessage(dialog, 0, 0);
            this.message.SetFontColor(LColor.white);
            int size = message.GetWidth() / (message.GetMessageFont().GetSize());

            if (LSystem.scaleWidth != 1 || LSystem.scaleHeight != 1)
            {
                if (size % 2 != 0)
                {
                    size = size + 2;
                }
                else
                {
                    size = size + 3;
                }
            }
            else
            {
                if (size % 2 != 0)
                {
                    size = size - 3;
                }
                else
                {
                    size = size - 4;
                }
            }
            this.message.SetMessageLength(size);
            this.message.SetLocation((GetWidth() - message.GetWidth()) / 2,
                                     GetHeight() - message.GetHeight() - 10);
            this.message.SetVisible(false);
            this.select = new LSelect(dialog, 0, 0);
            this.select.SetLocation(message.X(), message.Y());
            this.scrCG = new AVGCG();
            this.desktop.Add(message);
            this.desktop.Add(select);
            this.select.SetVisible(false);
        }
示例#9
0
        public static LPixmap GetResize(LPixmap image, int w, int h)
        {
            if (image == null)
            {
                return(null);
            }
            if (image.Width == w && image.Height == h)
            {
                return(image);
            }
            LPixmap result = new LPixmap(w, h, image.IsAlpha());

            result.DrawPixmap(image, 0, 0, w, h, 0, 0, image.GetWidth(),
                              image.GetHeight());
            return(result);
        }
示例#10
0
 public int PutImage(string name, LPixmap image)
 {
     CheckPacked();
     if (image == null)
     {
         throw new Exception();
     }
     if (image.GetWidth() <= 0 || image.GetHeight() <= 0)
     {
         throw new ArgumentException(
                   "width and height must be positive");
     }
     this.temps.Put(name, new PackEntry(image));
     this.packing = true;
     this.count++;
     return(temps.Size() - 1);
 }
示例#11
0
 public PackEntry(LPixmap image)
 {
     this.image = image;
     if (image != null)
     {
         this.fileName = image.GetPath();
         this.width = image.GetWidth();
         this.height = image.GetHeight();
     }
 }
示例#12
0
 public LPixmapData(LPixmap pix)
     : this(pix.GetData(), pix.GetWidth(), pix.GetHeight())
 {
 }
示例#13
0
 public LPixmapData(LPixmap pix)
     : this(pix.GetData(), pix.GetWidth(), pix.GetHeight())
 {
 }
示例#14
0
 /// <summary>
 /// �ж�ָ��������ͼƬ֮���Ƿ��������ײ
 /// </summary>
 ///
 /// <param name="src"></param>
 /// <param name="x1"></param>
 /// <param name="y1"></param>
 /// <param name="dest"></param>
 /// <param name="x2"></param>
 /// <param name="y2"></param>
 /// <returns></returns>
 public bool isPixelCollide(LPixmap src, float x1, float y1, LPixmap dest,
         float x2, float y2)
 {
     float width1 = x1 + src.GetWidth() - 1, height1 = y1 + src.GetHeight()
             - 1, width2 = x2 + dest.GetWidth() - 1, height2 = y2
             + dest.GetHeight() - 1;
     int xstart = (int)Loon.Utils.MathUtils.Max(x1, x2), ystart = (int)Loon.Utils.MathUtils.Max(y1, y2), xend = (int)Loon.Utils.MathUtils.Min(width1, width2), yend = (int)Loon.Utils.MathUtils.Min(height1, height2);
     int toty = Loon.Utils.MathUtils.Abs(yend - ystart);
     int totx = Loon.Utils.MathUtils.Abs(xend - xstart);
     for (int y = 1; y < toty - 1; y++)
     {
         int ny = Loon.Utils.MathUtils.Abs(ystart - (int)y1) + y;
         int ny1 = Loon.Utils.MathUtils.Abs(ystart - (int)y2) + y;
         for (int x = 1; x < totx - 1; x++)
         {
             int nx = Loon.Utils.MathUtils.Abs(xstart - (int)x1) + x;
             int nx1 = Loon.Utils.MathUtils.Abs(xstart - (int)x2) + x;
             try
             {
                 if (((src.GetPixel(nx, ny) != LSystem.TRANSPARENT))
                         && ((dest.GetPixel(nx1, ny1) != LSystem.TRANSPARENT)))
                 {
                     return true;
                 }
             }
             catch (Exception e)
             {
                 Log.Exception(e);
             }
         }
     }
     return false;
 }
示例#15
0
 private void InitDesktop()
 {
     if (desktop != null && sprites != null)
     {
         return;
     }
     this.desktop = new Desktop(this, GetWidth(), GetHeight());
     this.sprites = new Sprites(GetWidth(), GetHeight());
     if (dialog == null)
     {
         LPixmap g = new LPixmap(GetWidth() - 20,
                 GetHeight() / 2 - 20, true);
         g.SetAlphaValue(0, 0, 0, 125);
         g.FillRect(0, 0, g.GetWidth(), g.GetHeight());
         g.Dispose();
         dialog = g.Texture;
         g = null;
     }
     this.message = new LMessage(dialog, 0, 0);
     this.message.SetFontColor(LColor.white);
     int size = message.GetWidth() / (message.GetMessageFont().GetSize());
     if (LSystem.scaleWidth != 1 || LSystem.scaleHeight != 1)
     {
         if (size % 2 != 0)
         {
             size = size + 2;
         }
         else
         {
             size = size + 3;
         }
     }
     else
     {
         if (size % 2 != 0)
         {
             size = size - 3;
         }
         else
         {
             size = size - 4;
         }
     }
     this.message.SetMessageLength(size);
     this.message.SetLocation((GetWidth() - message.GetWidth()) / 2,
             GetHeight() - message.GetHeight() - 10);
     this.message.SetVisible(false);
     this.select = new LSelect(dialog, 0, 0);
     this.select.SetLocation(message.X(), message.Y());
     this.scrCG = new AVGCG();
     this.desktop.Add(message);
     this.desktop.Add(select);
     this.select.SetVisible(false);
 }
示例#16
0
        private static LTexture GetRMXPDialog(LPixmap rmxpImage, int width,
                                              int height, int size, int offset)
        {
            if (lazyImages == null)
            {
                lazyImages = new Dictionary <string, LTexture>(10);
            }
            string   keyName = "dialog" + width + "|" + height;
            LTexture lazy    = (LTexture)CollectionUtils.Get(lazyImages, keyName);

            if (lazy == null)
            {
                try
                {
                    int objWidth  = 64;
                    int objHeight = 64;
                    int x1        = 128;
                    int x2        = 192;
                    int y1        = 0;
                    int y2        = 64;

                    int center_size = objHeight - size * 2;

                    LPixmap lazyImage = null;

                    LPixmap image = null;

                    LPixmap messageImage = null;

                    image = GraphicsUtils.DrawClipImage(rmxpImage, objWidth,
                                                        objHeight, x1, y1, x2, y2);

                    LPixmap centerTop = GraphicsUtils.DrawClipImage(image,
                                                                    center_size, size, size, 0);

                    LPixmap centerDown = GraphicsUtils.DrawClipImage(image,
                                                                     center_size, size, size, objHeight - size);

                    LPixmap leftTop = GraphicsUtils.DrawClipImage(image, size, size,
                                                                  0, 0);

                    LPixmap leftCenter = GraphicsUtils.DrawClipImage(image, size,
                                                                     center_size, 0, size);

                    LPixmap leftDown = GraphicsUtils.DrawClipImage(image, size,
                                                                   size, 0, objHeight - size);

                    LPixmap rightTop = GraphicsUtils.DrawClipImage(image, size,
                                                                   size, objWidth - size, 0);

                    LPixmap rightCenter = GraphicsUtils.DrawClipImage(image, size,
                                                                      center_size, objWidth - size, size);

                    LPixmap rightDown = GraphicsUtils.DrawClipImage(image, size,
                                                                    size, objWidth - size, objHeight - size);
                    lazyImage = centerTop;

                    lazyImage = new LPixmap(width, height, true);

                    messageImage = GraphicsUtils.DrawClipImage(rmxpImage, 128, 128,
                                                               0, 0, 128, 128);

                    messageImage = GraphicsUtils.GetResize(messageImage, width
                                                           - offset + 1, height - offset + 1);
                    messageImage.UpdateAlpha(125);

                    lazyImage.DrawPixmap(messageImage, (lazyImage.Width - messageImage.Width) / 2, (lazyImage.Height - messageImage
                                                                                                    .Height) / 2);

                    LPixmap tmp = GraphicsUtils.GetResize(centerTop, width
                                                          - (size * 2), size);

                    lazyImage.DrawPixmap(tmp, size, 0);
                    if (tmp != null)
                    {
                        tmp.Dispose();
                        tmp = null;
                    }

                    tmp = GraphicsUtils.GetResize(centerDown, width - (size * 2),
                                                  size);

                    lazyImage.DrawPixmap(tmp, size, height - size);
                    if (tmp != null)
                    {
                        tmp.Dispose();
                        tmp = null;
                    }

                    lazyImage.DrawPixmap(leftTop, 0, 0);

                    tmp = GraphicsUtils.GetResize(leftCenter,
                                                  leftCenter.GetWidth(), width - (size * 2));

                    lazyImage.DrawPixmap(tmp, 0, size);
                    if (tmp != null)
                    {
                        tmp.Dispose();
                        tmp = null;
                    }
                    lazyImage.DrawPixmap(leftDown, 0, height - size);

                    int right = width - size;

                    lazyImage.DrawPixmap(rightTop, right, 0);

                    tmp = GraphicsUtils.GetResize(rightCenter, leftCenter
                                                  .Width, width - (size * 2));

                    lazyImage.DrawPixmap(tmp, right, size);
                    if (tmp != null)
                    {
                        tmp.Dispose();
                        tmp = null;
                    }
                    lazyImage.DrawPixmap(rightDown, right, height - size);

                    lazy       = lazyImage.Texture;
                    lazy.isExt = true;

                    lazyImages.Add(keyName, lazy);

                    image.Dispose();
                    messageImage.Dispose();
                    centerTop.Dispose();
                    centerDown.Dispose();
                    leftTop.Dispose();
                    leftCenter.Dispose();
                    leftDown.Dispose();
                    rightTop.Dispose();
                    rightCenter.Dispose();
                    rightDown.Dispose();

                    image        = null;
                    messageImage = null;
                    centerTop    = null;
                    centerDown   = null;
                    leftTop      = null;
                    leftCenter   = null;
                    leftDown     = null;
                    rightTop     = null;
                    rightCenter  = null;
                    rightDown    = null;
                }
                catch
                {
                }
            }
            return(lazy);
        }
示例#17
0
        public PShadowEffect(LPixmap img, LPixmap back, int x, int y, int w, int h)
        {
            if (deasilTrans == null || widdershinTrans == null)
            {
                deasilTrans = new Color[max_pixel];
                for (int i = 0; i < max_pixel; i++)
                {
                    deasilTrans[i] = new Color(i, i, i);
                }
                int count = 0;
                widdershinTrans = new Color[max_pixel];
                for (int i = 0; i < max_pixel; i++)
                {
                    widdershinTrans[count++] = deasilTrans[i];
                }
            }
            this.SetLocation(x, y);
            this.width   = w;
            this.height  = h;
            this.visible = true;
            LPixmap temp = null;

            if (back == null)
            {
                this.scaleWidth      = width / 2;
                this.scaleHeight     = height / 2;
                temp                 = GraphicsUtils.GetResize(img, scaleWidth, scaleHeight);
                this.image           = new LPixmap(scaleWidth, scaleHeight, true);
                this.finalDrawPixels = temp.GetData();
                this.nowDrawPixels   = (Color[])CollectionUtils.CopyOf(finalDrawPixels);
                if (temp != null)
                {
                    temp.Dispose();
                    temp = null;
                }
            }
            else
            {
                this.scaleWidth  = width / 2;
                this.scaleHeight = height / 2;
                temp             = GraphicsUtils.GetResize(img, scaleWidth, scaleHeight);
                this.image       = new LPixmap(scaleWidth, scaleHeight, true);
                if (back.GetWidth() == scaleWidth &&
                    back.GetHeight() == scaleHeight)
                {
                    this.finalBackgroundPixels = back.GetData();
                    this.backgroundPixels      = (Color[])CollectionUtils
                                                 .CopyOf(finalBackgroundPixels);
                }
                else
                {
                    LPixmap tmp = GraphicsUtils.GetResize(back, scaleWidth,
                                                          scaleHeight);
                    this.finalBackgroundPixels = tmp.GetData();
                    if (tmp != null)
                    {
                        tmp.Dispose();
                        tmp = null;
                    }
                    this.backgroundPixels = (Color[])CollectionUtils
                                            .CopyOf(finalBackgroundPixels);
                }
                this.finalDrawPixels = temp.GetData();
                this.nowDrawPixels   = (Color[])CollectionUtils.CopyOf(finalDrawPixels);
            }
            this.SetBlackToWhite(flag);
            if (temp != null)
            {
                temp.Dispose();
                temp = null;
            }
            if (img != null)
            {
                img.Dispose();
                img = null;
            }
            if (back != null)
            {
                back.Dispose();
                back = null;
            }
        }
示例#18
0
 public LPixmap SetTileBackground(LPixmap image, bool isReturn)
 {
     if (image == null)
     {
         return null;
     }
     int layerWidth = GetWidth();
     int layerHeight = GetHeight();
     int tileWidth = image.GetWidth();
     int tileHeight = image.GetHeight();
     LPixmap tempImage = new LPixmap(layerWidth, layerHeight, false);
     for (int x = 0; x < layerWidth; x += tileWidth)
     {
         for (int y = 0; y < layerHeight; y += tileHeight)
         {
             tempImage.DrawPixmap(image, x, y);
         }
     }
     if (isReturn)
     {
         return tempImage;
     }
     SetBackground(tempImage.Texture);
     return null;
 }
示例#19
0
 public int PutImage(string name, LPixmap image)
 {
     CheckPacked();
     if (image == null)
     {
         throw new Exception();
     }
     if (image.GetWidth() <= 0 || image.GetHeight() <= 0)
     {
         throw new ArgumentException(
                 "width and height must be positive");
     }
     this.temps.Put(name, new PackEntry(image));
     this.packing = true;
     this.count++;
     return temps.Size() - 1;
 }
示例#20
0
 public PShadowEffect(LPixmap img, LPixmap back, int x, int y, int w, int h)
 {
     if (deasilTrans == null || widdershinTrans == null)
     {
         deasilTrans = new Color[max_pixel];
         for (int i = 0; i < max_pixel; i++)
         {
             deasilTrans[i] = new Color(i, i, i);
         }
         int count = 0;
         widdershinTrans = new Color[max_pixel];
         for (int i = 0; i < max_pixel; i++)
         {
             widdershinTrans[count++] = deasilTrans[i];
         }
     }
     this.SetLocation(x, y);
     this.width = w;
     this.height = h;
     this.visible = true;
     LPixmap temp = null;
     if (back == null)
     {
         this.scaleWidth = width / 2;
         this.scaleHeight = height / 2;
         temp = GraphicsUtils.GetResize(img, scaleWidth, scaleHeight);
         this.image = new LPixmap(scaleWidth, scaleHeight, true);
         this.finalDrawPixels = temp.GetData();
         this.nowDrawPixels = (Color[])CollectionUtils.CopyOf(finalDrawPixels);
         if (temp != null)
         {
             temp.Dispose();
             temp = null;
         }
     }
     else
     {
         this.scaleWidth = width / 2;
         this.scaleHeight = height / 2;
         temp = GraphicsUtils.GetResize(img, scaleWidth, scaleHeight);
         this.image = new LPixmap(scaleWidth, scaleHeight, true);
         if (back.GetWidth() == scaleWidth
                 && back.GetHeight() == scaleHeight)
         {
             this.finalBackgroundPixels = back.GetData();
             this.backgroundPixels = (Color[])CollectionUtils
                     .CopyOf(finalBackgroundPixels);
         }
         else
         {
             LPixmap tmp = GraphicsUtils.GetResize(back, scaleWidth,
                     scaleHeight);
             this.finalBackgroundPixels = tmp.GetData();
             if (tmp != null)
             {
                 tmp.Dispose();
                 tmp = null;
             }
             this.backgroundPixels = (Color[])CollectionUtils
                     .CopyOf(finalBackgroundPixels);
         }
         this.finalDrawPixels = temp.GetData();
         this.nowDrawPixels = (Color[])CollectionUtils.CopyOf(finalDrawPixels);
     }
     this.SetBlackToWhite(flag);
     if (temp != null)
     {
         temp.Dispose();
         temp = null;
     }
     if (img != null)
     {
         img.Dispose();
         img = null;
     }
     if (back != null)
     {
         back.Dispose();
         back = null;
     }
 }