diff --git a/Spine/Interfaces/SpineExtension.cs b/Spine/Interfaces/SpineExtension.cs
index e47a96e..46e4c96 100644
--- a/Spine/Interfaces/SpineExtension.cs
+++ b/Spine/Interfaces/SpineExtension.cs
@@ -12,7 +12,7 @@ namespace Spine.Interfaces
///
/// 命中测试等级枚举值
///
- public enum HitTestLevel { Bounds, Meshes, Pixels }
+ public enum HitTestLevel { None, Bounds, Meshes, Pixels }
public static class SpineExtension
{
@@ -21,7 +21,7 @@ namespace Spine.Interfaces
///
/// 命中检测精确度等级
///
- public static HitTestLevel HitTestLevel { get; set; } = HitTestLevel.Bounds;
+ public static HitTestLevel HitTestLevel { get; set; }
///
/// 命中测试时输出命中的插槽名称
@@ -128,12 +128,12 @@ namespace Spine.Interfaces
if (self.A <= 0 || !self.Bone.Active || self.Disabled)
return false;
- if (HitTestLevel == HitTestLevel.Bounds)
+ if (HitTestLevel == HitTestLevel.None || HitTestLevel == HitTestLevel.Bounds)
{
self.GetBounds(out var bx, out var by, out var bw, out var bh);
return x >= bx && x <= (bx + bw) && y >= by && y <= (by + bh);
}
- else
+ else if (HitTestLevel == HitTestLevel.Meshes || HitTestLevel == HitTestLevel.Pixels)
{
float[] vertices = new float[8];
int[] triangles;
@@ -217,6 +217,10 @@ namespace Spine.Interfaces
}
return false;
}
+ else
+ {
+ throw new NotImplementedException(HitTestLevel.ToString());
+ }
}
///
@@ -224,24 +228,29 @@ namespace Spine.Interfaces
///
public static bool HitTest(this ISkeleton self, float x, float y)
{
+ if (HitTestLevel == HitTestLevel.None)
+ {
+ self.GetBounds(out var bx, out var by, out var bw, out var bh);
+ return x >= bx && x <= (bx + bw) && y >= by && y <= (by + bh);
+ }
+
var cache = new Dictionary();
bool hit = false;
- List slotNames = [];
+ string hitSlotName = "";
foreach (var st in self.IterDrawOrder().Reverse())
{
if (st.HitTest(x, y, cache))
{
hit = true;
- if (!LogHitSlots)
- break;
- slotNames.Add(st.Name);
+ hitSlotName = st.Name;
+ break;
}
}
foreach (var img in cache.Values) img.Dispose();
- if (LogHitSlots && slotNames.Count > 0)
+ if (hit && LogHitSlots)
{
- _logger.Debug("Hit ({0}): [{1}]", self.Name, string.Join(", ", slotNames));
+ _logger.Debug("Hit ({0}): [{1}]", self.Name, hitSlotName);
}
return hit;
}