コード例 #1
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(LImage src, float x1, float y1, LImage 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).PackedValue != LSystem.TRANSPARENT)) &&
                            ((dest.GetPixel(nx1, ny1).PackedValue != LSystem.TRANSPARENT)))
                        {
                            return(true);
                        }
                    }
                    catch (Exception e)
                    {
                        Loon.Utils.Debugging.Log.Exception(e);
                    }
                }
            }
            return(false);
        }
コード例 #2
0
        public virtual LImage SetTileBackground(LImage image, bool isReturn)
        {
            if (image == null)
            {
                return(null);
            }
            int layerWidth  = GetWidth();
            int layerHeight = GetHeight();
            int tileWidth   = image.GetWidth();
            int tileHeight  = image.GetHeight();

            LImage    tempImage = LImage.CreateImage(layerWidth, layerHeight, false);
            LGraphics g         = tempImage.GetLGraphics();

            for (int x = 0; x < layerWidth; x += tileWidth)
            {
                for (int y = 0; y < layerHeight; y += tileHeight)
                {
                    g.DrawImage(image, x, y);
                }
            }
            g.Dispose();
            if (isReturn)
            {
                return(tempImage);
            }
            tempImage.SetFormat(Loon.Core.Graphics.Opengl.LTexture.Format.SPEED);
            SetBackground(tempImage.GetTexture());
            if (tempImage != null)
            {
                tempImage.Dispose();
                tempImage = null;
            }
            return(null);
        }
コード例 #3
0
        public static LTexture FilterColor(string res, LColor height, Loon.Core.Graphics.Opengl.LTexture.Format format)
        {
            uint      color = height.GetRGB();
            LImage    tmp   = LImage.CreateImage(res);
            LImage    image = LImage.CreateImage(tmp.GetWidth(), tmp.GetHeight(), true);
            LGraphics g     = image.GetLGraphics();

            g.DrawImage(tmp, 0, 0);
            g.Dispose();
            if (tmp != null)
            {
                tmp.Dispose();
                tmp = null;
            }
            Color[] pixels = image.GetPixels();
            int     size   = pixels.Length;

            for (int i = 0; i < size; i++)
            {
                if (pixels[i].PackedValue == color)
                {
                    pixels[i].PackedValue = LSystem.TRANSPARENT;
                }
            }
            image.SetFormat(format);
            image.SetPixels(pixels, image.GetWidth(), image.GetHeight());
            LTexture texture = image.GetTexture();

            if (image != null)
            {
                image.Dispose();
                image = null;
            }
            return(texture);
        }
コード例 #4
0
ファイル: CollisionMask.cs プロジェクト: zx8326123/LGame
 public static Polygon MakePolygon(LImage image)
 {
     if (image == null)
     {
         throw new RuntimeException("Image is null !");
     }
     return(MakePolygon(image.GetIntPixels(), image.GetWidth(),
                        image.GetHeight()));
 }
コード例 #5
0
ファイル: CollisionMask.cs プロジェクト: zx8326123/LGame
 public static LTexture.Mask CreateMask(LImage image)
 {
     if (image == null)
     {
         throw new RuntimeException("Image is null !");
     }
     return(CreateMask(image.GetIntPixels(), image.GetWidth(),
                       image.GetHeight()));
 }
コード例 #6
0
 internal PackEntry(LImage image)
 {
     this.image = image;
     if (image != null)
     {
         this.fileName = image.GetPath();
         this.width    = image.GetWidth();
         this.height   = image.GetHeight();
     }
 }
コード例 #7
0
 public LTexture Pack(Loon.Core.Graphics.Opengl.LTexture.Format format)
 {
     if (texture != null && !packing)
     {
         return(texture);
     }
     if (fileName != null)
     {
         texture       = new LTexture(GLLoader.GetTextureData(fileName), format);
         texture.isExt = true;
     }
     else
     {
         LImage image = PackImage();
         if (image == null)
         {
             return(null);
         }
         if (texture != null)
         {
             texture.Destroy();
             texture = null;
         }
         if (colorMask != null)
         {
             Color[] pixels = image.GetPixels();
             int     size   = pixels.Length;
             uint    color  = colorMask.GetRGB();
             for (int i = 0; i < size; i++)
             {
                 if (pixels[i].PackedValue == color)
                 {
                     pixels[i].PackedValue = LSystem.TRANSPARENT;
                 }
             }
             image.SetPixels(pixels, image.GetWidth(), image.GetHeight());
         }
         texture       = new LTexture(GLLoader.GetTextureData(image), format);
         texture.isExt = true;
         if (image != null)
         {
             image.Dispose();
             image = null;
         }
     }
     return(texture);
 }
コード例 #8
0
 public int PutImage(string name, LImage image)
 {
     CheckPacked();
     if (image == null)
     {
         throw new NullReferenceException();
     }
     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);
 }
コード例 #9
0
ファイル: AVGDialog.cs プロジェクト: zx8326123/LGame
        public static LTexture GetRMXPDialog(string fileName, int width,
                                             int height)
        {
            if (lazyImages == null)
            {
                lazyImages = new Dictionary <string, LTexture>(10);
            }
            LImage dialog = LImage.CreateImage(fileName);
            int    w      = dialog.GetWidth();

            Color[] pixels = dialog.GetPixels();
            int     index  = -1;
            int     count  = 0;
            uint    pixel;

            for (int i = 0; i < 5; i++)
            {
                pixel = pixels[(141 + i) + w * 12].PackedValue;

                if (index == -1)
                {
                    index = (int)pixel;
                }
                if (index == pixel)
                {
                    count++;
                }
            }
            if (count == 5)
            {
                return(GetRMXPDialog(dialog, width, height, 16, 5));
            }
            else if (count == 1)
            {
                return(GetRMXPDialog(dialog, width, height, 27, 5));
            }
            else if (count == 2)
            {
                return(GetRMXPDialog(dialog, width, height, 20, 5));
            }
            else
            {
                return(GetRMXPDialog(dialog, width, height, 27, 5));
            }
        }
コード例 #10
0
ファイル: GraphicsUtils.cs プロジェクト: nobcdz/LGame
        public static LImage GetResize(LImage image, int w, int h)
        {
            if (image == null)
            {
                return(null);
            }
            if (image.width == w && image.height == h)
            {
                return(image);
            }
            LImage    result = LImage.CreateImage(w, h, image.HasAlpha());
            LGraphics g      = result.GetLGraphics();

            g.DrawImage(image, 0, 0, w, h, 0, 0, image.GetWidth(),
                        image.GetHeight());
            g.Dispose();
            return(result);
        }
コード例 #11
0
        public static LTexture FilterLimitColor(string res, LColor start,
                                                LColor end, Loon.Core.Graphics.Opengl.LTexture.Format format)
        {
            int       sred   = start.R;
            int       sgreen = start.G;
            int       sblue  = start.B;
            int       ered   = end.R;
            int       egreen = end.G;
            int       eblue  = end.B;
            LImage    tmp    = LImage.CreateImage(res);
            LImage    image  = LImage.CreateImage(tmp.GetWidth(), tmp.GetHeight(), true);
            LGraphics g      = image.GetLGraphics();

            g.DrawImage(tmp, 0, 0);
            g.Dispose();
            if (tmp != null)
            {
                tmp.Dispose();
                tmp = null;
            }
            Color[] pixels = image.GetPixels();
            int     size   = pixels.Length;

            for (int i = 0; i < size; i++)
            {
                Color pixel = pixels[i];
                if ((pixel.R >= sred && pixel.G >= sgreen && pixel.B >= sblue) &&
                    (pixel.R <= ered && pixel.G <= egreen && pixel.B <= eblue))
                {
                    pixels[i].PackedValue = LSystem.TRANSPARENT;
                }
            }
            image.SetFormat(format);
            image.SetPixels(pixels, image.GetWidth(), image.GetHeight());
            LTexture texture = image.GetTexture();

            if (image != null)
            {
                image.Dispose();
                image = null;
            }
            return(texture);
        }
コード例 #12
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)
            {
                LImage tmp = LImage.CreateImage(GetWidth() - 20,
                                                GetHeight() / 2 - 20, true);
                LGraphics g = tmp.GetLGraphics();
                g.SetColor(0, 0, 0, 125);
                g.FillRect(0, 0, tmp.GetWidth(), tmp.GetHeight());
                g.Dispose();
                g      = null;
                dialog = new LTexture(GLLoader.GetTextureData(tmp));
                if (tmp != null)
                {
                    tmp.Dispose();
                    tmp = 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);
        }
コード例 #13
0
ファイル: PShadowEffect.cs プロジェクト: zx8326123/LGame
        public PShadowEffect(LImage img, LImage 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;
            LImage temp = null;

            if (back == null)
            {
                this.scaleWidth      = width / 2;
                this.scaleHeight     = height / 2;
                temp                 = GraphicsUtils.GetResize(img, scaleWidth, scaleHeight);
                this.image           = LImage.CreateImage(scaleWidth, scaleHeight, true);
                this.finalDrawPixels = temp.GetPixels();
                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       = LImage.CreateImage(scaleWidth, scaleHeight, true);
                if (back.GetWidth() == scaleWidth &&
                    back.GetHeight() == scaleHeight)
                {
                    this.finalBackgroundPixels = back.GetPixels();
                    this.backgroundPixels      = (Color[])CollectionUtils
                                                 .CopyOf(finalBackgroundPixels);
                }
                else
                {
                    LImage tmp = GraphicsUtils.GetResize(back, scaleWidth,
                                                         scaleHeight);
                    this.finalBackgroundPixels = tmp.GetPixels();
                    if (tmp != null)
                    {
                        tmp.Dispose();
                        tmp = null;
                    }
                    this.backgroundPixels = (Color[])CollectionUtils
                                            .CopyOf(finalBackgroundPixels);
                }
                this.finalDrawPixels = temp.GetPixels();
                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;
            }
        }
コード例 #14
0
ファイル: PShadowEffect.cs プロジェクト: zx8326123/LGame
 public PShadowEffect(LImage img, LImage back, int x, int y)
     : this(img, back, x, y, img.GetWidth(), img.GetHeight())
 {
 }
コード例 #15
0
ファイル: LLayer.cs プロジェクト: keppelcao/LGame
        public virtual LImage SetTileBackground(LImage image, bool isReturn)
        {
            if (image == null)
            {
                return null;
            }
            int layerWidth = GetWidth();
            int layerHeight = GetHeight();
            int tileWidth = image.GetWidth();
            int tileHeight = image.GetHeight();

            LImage tempImage = LImage.CreateImage(layerWidth, layerHeight, false);
            LGraphics g = tempImage.GetLGraphics();
            for (int x = 0; x < layerWidth; x += tileWidth)
            {
                for (int y = 0; y < layerHeight; y += tileHeight)
                {
                    g.DrawImage(image, x, y);
                }
            }
            g.Dispose();
            if (isReturn)
            {
                return tempImage;
            }
            tempImage.SetFormat(Loon.Core.Graphics.Opengl.LTexture.Format.SPEED);
            SetBackground(tempImage.GetTexture());
            if (tempImage != null)
            {
                tempImage.Dispose();
                tempImage = null;
            }
            return null;
        }
コード例 #16
0
ファイル: LTexturePack.cs プロジェクト: 207h2Flogintvg/LGame
		public int PutImage(string name, LImage image) {
			CheckPacked();
			if (image == null) {
				throw new NullReferenceException();
			}
			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;
		}
コード例 #17
0
ファイル: LTexturePack.cs プロジェクト: 207h2Flogintvg/LGame
            internal PackEntry(LImage image)
            {
				this.image = image;
				if (image != null) {
					this.fileName = image.GetPath();
					this.width = image.GetWidth();
					this.height = image.GetHeight();
				}
			}
コード例 #18
0
ファイル: AVGDialog.cs プロジェクト: zx8326123/LGame
        private static LTexture GetRMXPDialog(LImage 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;

                    LImage lazyImage = null;

                    LImage image = null;

                    LImage messageImage = null;

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

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

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

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

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

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

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

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

                    LImage rightDown = GraphicsUtils.DrawClipImage(image, size,
                                                                   size, objWidth - size, objHeight - size);

                    lazyImage = centerTop;

                    lazyImage = LImage.CreateImage(width, height, true);

                    LGraphics g = lazyImage.GetLGraphics();

                    g.SetAlpha(0.5f);

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

                    messageImage = GraphicsUtils.GetResize(messageImage, width
                                                           - offset, height - offset);
                    messageImage.XNAUpdateAlpha(125);

                    g.DrawImage(messageImage, (lazyImage.Width - messageImage.Width) / 2 + 1, (lazyImage.Height - messageImage
                                                                                               .Height) / 2 + 1);

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

                    g.DrawImage(tmp, size, 0);
                    if (tmp != null)
                    {
                        tmp.Dispose();
                        tmp = null;
                    }

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

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

                    g.DrawImage(leftTop, 0, 0);

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

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

                    int right = width - size;

                    g.DrawImage(rightTop, right, 0);

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

                    g.DrawImage(tmp, right, size);
                    if (tmp != null)
                    {
                        tmp.Dispose();
                        tmp = null;
                    }
                    g.DrawImage(rightDown, right, height - size);
                    g.Dispose();
                    lazy = lazyImage.GetTexture();

                    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 (Exception ex)
                {
                    Loon.Utils.Debugging.Log.Exception(ex);
                }
            }
            return(lazy);
        }