/// <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); }
/// <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; }