diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs index e638ed1..5bbbe0f 100644 --- a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs +++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs @@ -94,10 +94,11 @@ { if (value != _affiliationArea) { + var prev = _affiliationArea; _affiliationArea = value; if (!IsDestroyed) { - OnAffiliationChange(); + OnAffiliationChange(prev); } } } @@ -591,7 +592,8 @@ /// <summary> /// 归属区域发生改变 /// </summary> - protected virtual void OnAffiliationChange() + /// <param name="prevArea">上一个区域, 注意可能为空</param> + protected virtual void OnAffiliationChange(AffiliationArea prevArea) { } @@ -1490,6 +1492,11 @@ /// </summary> public void BecomesStaticImage() { + if (_processingBecomesStaticImage) + { + return; + } + if (AffiliationArea == null) { GD.PrintErr($"调用函数: BecomesStaticImage() 失败, 物体{Name}没有归属区域, 无法确定绘制到哪个ImageCanvas上, 直接执行销毁"); @@ -1497,11 +1504,6 @@ return; } - if (_processingBecomesStaticImage) - { - return; - } - _processingBecomesStaticImage = true; EnableBehavior = false; var staticImageCanvas = AffiliationArea.RoomInfo.StaticImageCanvas; diff --git a/DungeonShooting_Godot/src/framework/map/image/ImageCanvas.cs b/DungeonShooting_Godot/src/framework/map/image/ImageCanvas.cs index 842349b..4373220 100644 --- a/DungeonShooting_Godot/src/framework/map/image/ImageCanvas.cs +++ b/DungeonShooting_Godot/src/framework/map/image/ImageCanvas.cs @@ -106,6 +106,7 @@ if (item.RenderWidth >= RenderViewportSize.X) { GD.PrintErr($"图像旋转后的宽度大于{RenderViewportSize.X}, 不支持绘制到 ImageCanvas 下!"); + item.SrcImage.Dispose(); return; } diff --git a/DungeonShooting_Godot/src/framework/map/image/ImageCanvas_Static.cs b/DungeonShooting_Godot/src/framework/map/image/ImageCanvas_Static.cs index 9f1e3ff..867235f 100644 --- a/DungeonShooting_Godot/src/framework/map/image/ImageCanvas_Static.cs +++ b/DungeonShooting_Godot/src/framework/map/image/ImageCanvas_Static.cs @@ -35,7 +35,7 @@ /// </summary> public static Vector2I RenderViewportSize { get; private set; } - //预渲染队列, 这里不用 Queue 是因为大图尝试添加到渲染队列可能失败, 为了不影响 + //预渲染队列, 这里不用 Queue 是因为大图尝试添加到渲染队列可能失败, 为了不影响渲染顺序, 所以使用 List private static readonly List<ImageRenderData> _queueItems = new List<ImageRenderData>(); //渲染中的队列 private static readonly Queue<ImageRenderData> _drawingQueueItems = new Queue<ImageRenderData>(); diff --git a/DungeonShooting_Godot/src/framework/map/image/ImageRenderData.cs b/DungeonShooting_Godot/src/framework/map/image/ImageRenderData.cs index c6a4f79..3087bd9 100644 --- a/DungeonShooting_Godot/src/framework/map/image/ImageRenderData.cs +++ b/DungeonShooting_Godot/src/framework/map/image/ImageRenderData.cs @@ -83,5 +83,8 @@ /// 渲染在 viewport 上中心点y轴偏移量 /// </summary> public int RenderOffsetY; + /// <summary> + /// 占用区域 + /// </summary> public ImageCanvas.AreaPlaceholder AreaPlaceholder; } \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/activity/role/Role.cs b/DungeonShooting_Godot/src/game/activity/role/Role.cs index 7782cee..23604aa 100644 --- a/DungeonShooting_Godot/src/game/activity/role/Role.cs +++ b/DungeonShooting_Godot/src/game/activity/role/Role.cs @@ -522,7 +522,7 @@ } } - protected override void OnAffiliationChange() + protected override void OnAffiliationChange(AffiliationArea prevArea) { //身上的武器的所属区域也得跟着变 WeaponPack.ForEach((weapon, i) =>