diff --git a/DungeonShooting_Godot/src/game/role/Player.cs b/DungeonShooting_Godot/src/game/role/Player.cs
index f73b193..6f2cf16 100644
--- a/DungeonShooting_Godot/src/game/role/Player.cs
+++ b/DungeonShooting_Godot/src/game/role/Player.cs
@@ -55,6 +55,7 @@
// MoveSpeed = 500;
// CollisionLayer = 0;
// CollisionMask = 0;
+ // GameCamera.Main.Zoom = new Vector2(0.4f, 0.4f);
}
protected override void Process(float delta)
diff --git a/DungeonShooting_Godot/src/game/room/DungeonTile.cs b/DungeonShooting_Godot/src/game/room/DungeonTile.cs
index 4b2240d..fb4831a 100644
--- a/DungeonShooting_Godot/src/game/room/DungeonTile.cs
+++ b/DungeonShooting_Godot/src/game/room/DungeonTile.cs
@@ -403,18 +403,24 @@
}
///
- /// 计算网格区域, 并且赋值给 navigationPolygon
+ /// 计算网格区域, 并将导航区域挂载到 navigationRoot 上
///
- public void GenerateNavigationPolygon(NavigationRegion2D navigationPolygon)
+ public void GenerateNavigationPolygon(Node2D navigationRoot)
{
GenerateNavigationPolygon();
- var polygon = new NavigationPolygon();
- foreach (var polygonData in _polygonDataList)
+ // 在 Godot4.0_rc6 中 如果将所有点都放在 NavigationPolygon 里面, 即使点是对的, 但调用 MakePolygonsFromOutlines 还是可能会报错, 这应该是个bug
+ for (var i = 0; i < _polygonDataList.Count; i++)
{
- polygon.AddOutline(polygonData.Points.ToArray());
+ var polygonData = _polygonDataList[i];
+ var polygon = new NavigationPolygon();
+ var array = polygonData.Points.ToArray();
+ polygon.AddOutline(array);
+ polygon.MakePolygonsFromOutlines();
+ var navigationPolygon = new NavigationRegion2D();
+ navigationPolygon.Name = "NavigationRegion" + i;
+ navigationPolygon.NavigationPolygon = polygon;
+ navigationRoot.AddChild(navigationPolygon);
}
- polygon.MakePolygonsFromOutlines();
- navigationPolygon.NavigationPolygon = polygon;
}
///
diff --git a/DungeonShooting_Godot/src/game/room/RoomManager.cs b/DungeonShooting_Godot/src/game/room/RoomManager.cs
index 5429487..9dd5ace 100644
--- a/DungeonShooting_Godot/src/game/room/RoomManager.cs
+++ b/DungeonShooting_Godot/src/game/room/RoomManager.cs
@@ -26,13 +26,7 @@
/// 玩家对象
///
public Player Player { get; private set; }
-
- ///
- /// 导航区域形状
- ///
- public NavigationRegion2D NavigationPolygon { get; private set; }
-
-
+
private DungeonTile _dungeonTile;
private AutoTileConfig _autoTileConfig;
@@ -41,9 +35,6 @@
public override void _EnterTree()
{
- NavigationPolygon = new NavigationRegion2D();
- AddChild(NavigationPolygon);
-
//创建玩家
Player = new Player();
Player.Position = new Vector2(30, 30);
@@ -58,6 +49,7 @@
_font = ResourceManager.Load(ResourcePath.resource_font_cn_font_36_tres);
+ var nowTicks = DateTime.Now.Ticks;
//生成地牢房间
_generateDungeon = new GenerateDungeon();
_generateDungeon.Generate();
@@ -66,13 +58,10 @@
_autoTileConfig = new AutoTileConfig();
_dungeonTile = new DungeonTile(TileRoot);
_dungeonTile.AutoFillRoomTile(_autoTileConfig, _generateDungeon.StartRoom);
-
- //根据房间数据创建填充 tiled
- var nowTicks = DateTime.Now.Ticks;
//生成寻路网格
- _dungeonTile.GenerateNavigationPolygon(NavigationPolygon);
- GD.Print("计算NavigationPolygon用时: " + (DateTime.Now.Ticks - nowTicks) / 10000 + "毫秒");
+ _dungeonTile.GenerateNavigationPolygon(this);
+ GD.Print("生成地牢用时: " + (DateTime.Now.Ticks - nowTicks) / 10000 + "毫秒");
//播放bgm
SoundManager.PlayMusic(ResourcePath.resource_sound_bgm_Intro_ogg, -17f);
@@ -157,7 +146,8 @@
if (_dungeonTile != null)
{
//绘制ai寻路区域
- foreach (var item in _dungeonTile.GetPolygonData())
+ var polygonData = _dungeonTile.GetPolygonData();
+ foreach (var item in polygonData)
{
if (item.Points.Count >= 2)
{
@@ -166,7 +156,7 @@
}
}
//绘制房间区域
- DrawRoomInfo(_generateDungeon.StartRoom);
+ //DrawRoomInfo(_generateDungeon.StartRoom);
}
}