diff --git a/DungeonShooting_Godot/project.godot b/DungeonShooting_Godot/project.godot index fac0b6e..601f8cb 100644 --- a/DungeonShooting_Godot/project.godot +++ b/DungeonShooting_Godot/project.godot @@ -11,7 +11,7 @@ [application] config/name="DungeonShooting" -run/main_scene="res://scene/test/TestOptimizeSprite.tscn" +run/main_scene="res://scene/Main.tscn" config/features=PackedStringArray("4.1", "C#") config/icon="res://icon.png" diff --git a/DungeonShooting_Godot/resource/map/tileMaps/testGroup/inlet/Room1.tscn b/DungeonShooting_Godot/resource/map/tileMaps/testGroup/inlet/Room1.tscn index 0d8c452..145ed80 100644 --- a/DungeonShooting_Godot/resource/map/tileMaps/testGroup/inlet/Room1.tscn +++ b/DungeonShooting_Godot/resource/map/tileMaps/testGroup/inlet/Room1.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=5 format=3 uid="uid://dmeb88jotqro6"] +[gd_scene load_steps=6 format=3 uid="uid://dmeb88jotqro6"] [ext_resource type="TileSet" uid="uid://b00g22o1cqhe8" path="res://resource/map/tileset/TileSet1.tres" id="1_osa3n"] [ext_resource type="Script" path="res://src/framework/map/DungeonRoomTemplate.cs" id="2_erhdx"] [ext_resource type="Script" path="res://src/framework/map/mark/ActivityMark.cs" id="3_m4jrh"] [ext_resource type="Texture2D" uid="uid://civvcowt2wklr" path="res://resource/sprite/weapon/weapon0001/Weapon0001.png" id="4_wtntr"] +[ext_resource type="Texture2D" uid="uid://dto03bc2qbhnj" path="res://resource/sprite/shell/Shell0001.png" id="5_amyos"] [node name="Room1" type="TileMap"] tile_set = ExtResource("1_osa3n") @@ -54,5 +55,10 @@ [node name="Sprite2D" type="Sprite2D" parent="."] position = Vector2(61, 25) -rotation = 5.23599 +rotation = -0.785398 texture = ExtResource("4_wtntr") + +[node name="Sprite2D2" type="Sprite2D" parent="."] +position = Vector2(120, 51) +rotation = 0.785398 +texture = ExtResource("5_amyos") diff --git a/DungeonShooting_Godot/scene/test/TestOptimizeSprite.tscn b/DungeonShooting_Godot/scene/test/TestOptimizeSprite.tscn index 38db9b7..0ac97b4 100644 --- a/DungeonShooting_Godot/scene/test/TestOptimizeSprite.tscn +++ b/DungeonShooting_Godot/scene/test/TestOptimizeSprite.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=10 format=3 uid="uid://crwmgbequhxf3"] +[gd_scene load_steps=11 format=3 uid="uid://crwmgbequhxf3"] [ext_resource type="Script" path="res://src/test/TestOptimizeSprite.cs" id="1_rwuav"] [ext_resource type="Texture2D" uid="uid://civvcowt2wklr" path="res://resource/sprite/weapon/weapon0001/Weapon0001.png" id="2_qvs0g"] @@ -7,9 +7,10 @@ [ext_resource type="Texture2D" uid="uid://504f1r0mi33n" path="res://resource/sprite/weapon/weapon0005/Weapon0005.png" id="5_bdcjp"] [ext_resource type="Texture2D" uid="uid://dn0un05nr8xun" path="res://resource/sprite/weapon/weapon0006/Weapon0006.png" id="6_sqcu7"] [ext_resource type="Texture2D" uid="uid://bxhbsq0wb2yo1" path="res://resource/sprite/weapon/knife1.png" id="7_w4iwy"] +[ext_resource type="Texture2D" uid="uid://dto03bc2qbhnj" path="res://resource/sprite/shell/Shell0001.png" id="8_csd6d"] [ext_resource type="Texture2D" uid="uid://yn8t7ovmt4gj" path="res://resource/sprite/weapon/gun1.png" id="9_mddgj"] [ext_resource type="Texture2D" uid="uid://5geiuvv6hyov" path="res://resource/sprite/weapon/gun2.png" id="10_rxwsh"] [node name="TestOptimizeSprite" type="Node2D"] script = ExtResource("1_rwuav") -ImageList = Array[Texture2D]([ExtResource("2_qvs0g"), ExtResource("3_jejmg"), ExtResource("4_twsss"), ExtResource("5_bdcjp"), ExtResource("6_sqcu7"), ExtResource("7_w4iwy"), null, ExtResource("9_mddgj"), ExtResource("10_rxwsh")]) +ImageList = Array[Texture2D]([ExtResource("2_qvs0g"), ExtResource("3_jejmg"), ExtResource("4_twsss"), ExtResource("5_bdcjp"), ExtResource("6_sqcu7"), ExtResource("7_w4iwy"), ExtResource("8_csd6d"), ExtResource("9_mddgj"), ExtResource("10_rxwsh")]) diff --git a/DungeonShooting_Godot/src/framework/map/image/ImageCanvas.cs b/DungeonShooting_Godot/src/framework/map/image/ImageCanvas.cs index 1633787..0e8f50d 100644 --- a/DungeonShooting_Godot/src/framework/map/image/ImageCanvas.cs +++ b/DungeonShooting_Godot/src/framework/map/image/ImageCanvas.cs @@ -35,7 +35,7 @@ { _canvas.SetPixel(i, h / 2, Colors.Green); } - + for (int j = 0; j < h; j++) { _canvas.SetPixel(w / 2, j, Colors.Green); @@ -148,7 +148,7 @@ var sinAngle = Mathf.Sin(rotation); if (cosAngle == 0) { - cosAngle = 1e-6f; + cosAngle = -1e-6f; } if (sinAngle == 0) @@ -181,12 +181,21 @@ var cw = _canvas.GetWidth(); var ch = _canvas.GetHeight(); + + var numX = Mathf.Min(num1, (newWidth - 1) * cosAngle + (newHeight - 1) * sinAngle + num1); + var numY = Mathf.Min(num2, -(newWidth - 1) * sinAngle + (newHeight - 1) * cosAngle + num2); + for (var x2 = 0; x2 < newWidth; x2++) { for (var y2 = 0; y2 < newHeight; y2++) { - var x1 = Mathf.RoundToInt(x2 * cosAngle + y2 * sinAngle + num1); - var y1 = Mathf.RoundToInt(-x2 * sinAngle + y2 * cosAngle + num2); + //映射到原图的位置 + // var x1 = x2 * cosAngle + y2 * sinAngle + num1; + // var y1 = -x2 * sinAngle + y2 * cosAngle + num2; + + + var x1 = Mathf.FloorToInt(x2 * cosAngle + y2 * sinAngle + num1 - numX); + var y1 = Mathf.FloorToInt(-x2 * sinAngle + y2 * cosAngle + num2 - numY); if (x1 < 0 || x1 >= width || y1 < 0 || y1 >= height) { @@ -194,6 +203,7 @@ continue; } + var cx = x2 + x - offsetX; if (cx < 0 || cx >= cw) { @@ -206,7 +216,11 @@ continue; } - _canvas.SetPixel(cx, cy, _canvas.GetPixel(cx, cy).Blend(origin.GetPixel(x1, y1))); + //_canvas.SetPixel(cx, cy, origin.GetPixel(x1, y1)); + _canvas.SetPixel(cx, cy, _canvas.GetPixel(cx, cy).Blend(origin.GetPixel( + //Mathf.RoundToInt(x1), Mathf.RoundToInt(y1) + x1, y1 + ))); } } } diff --git a/DungeonShooting_Godot/src/test/TestOptimizeSprite.cs b/DungeonShooting_Godot/src/test/TestOptimizeSprite.cs index 4669358..664adf1 100644 --- a/DungeonShooting_Godot/src/test/TestOptimizeSprite.cs +++ b/DungeonShooting_Godot/src/test/TestOptimizeSprite.cs @@ -7,20 +7,36 @@ public override void _Ready() { ImageCanvas.MaxHandlerTime = 16; - var imageCanvas = new ImageCanvas(1920, 1080); - - for (int i = 0; i < 10000; i++) + var scale = 10; + var imageCanvas = new ImageCanvas(1920 / scale, 1080 / scale); + imageCanvas.Scale = new Vector2(scale, scale); + var delta = 360f / (15 * 8); + var angle = 0f; + for (int i = 0; i < 15; i++) { - var texture = Utils.RandomChoose(ImageList); - var centerX = Utils.RandomRangeInt(0, texture.GetWidth() - 1); - var centerY = Utils.RandomRangeInt(0, texture.GetHeight() - 1); - var angle = Utils.RandomRangeInt(0, 360); - imageCanvas.DrawImageInCanvas(texture, - Utils.RandomRangeInt(0, imageCanvas.Width), Utils.RandomRangeInt(0, imageCanvas.Height), - angle, centerX, centerY, Utils.RandomBoolean() - ); + for (int j = 0; j < 8; j++) + { + //var texture = Utils.RandomChoose(ImageList); + var texture = ImageList[6]; + var centerX = 0; + var centerY = 0; + //var angle = Utils.RandomRangeInt(0, 360); + GD.Print($"x: {i}, y: {j}, angle: " + angle); + imageCanvas.DrawImageInCanvas(texture, + //Utils.RandomRangeInt(0, imageCanvas.Width), Utils.RandomRangeInt(0, imageCanvas.Height), + 10 + i * 10, 10 + j * 10, + angle, centerX, centerY, false + ); + angle += delta; + } } + //var texture = ImageList[6]; + //imageCanvas.DrawImageInCanvas(texture, imageCanvas.Width / 2, imageCanvas.Height / 2, 0, 0, 0, false); + //imageCanvas.DrawImageInCanvas(texture, imageCanvas.Width / 2, imageCanvas.Height / 2, 45, texture.GetWidth() - 1, texture.GetHeight() - 1, false); + + + AddChild(imageCanvas); }