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