From 9bc996f593acb0dbaa9513d21ff9f074bc431e02 Mon Sep 17 00:00:00 2001 From: DevKage Date: Sat, 17 Feb 2024 15:02:51 +0530 Subject: [PATCH 1/3] Use image size instead of canvas --- .../lib/src/renderable_layers/image_layer.dart | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/flame_tiled/lib/src/renderable_layers/image_layer.dart b/packages/flame_tiled/lib/src/renderable_layers/image_layer.dart index 16f8e9cf3f0..3dd34cea8fb 100644 --- a/packages/flame_tiled/lib/src/renderable_layers/image_layer.dart +++ b/packages/flame_tiled/lib/src/renderable_layers/image_layer.dart @@ -14,7 +14,6 @@ class FlameImageLayer extends RenderableLayer { final Image _image; late final ImageRepeat _repeat; final MutableRect _paintArea = MutableRect.fromLTRB(0, 0, 0, 0); - final Vector2 _canvasSize = Vector2.zero(); final Vector2 _maxTranslation = Vector2.zero(); FlameImageLayer({ @@ -29,9 +28,7 @@ class FlameImageLayer extends RenderableLayer { } @override - void handleResize(Vector2 canvasSize) { - _canvasSize.setFrom(canvasSize); - } + void handleResize(Vector2 canvasSize) {} @override void render(Canvas canvas, CameraComponent? camera) { @@ -81,18 +78,18 @@ class FlameImageLayer extends RenderableLayer { if (_repeat == ImageRepeat.repeatX || _repeat == ImageRepeat.repeat) { final xImages = (_maxTranslation.x / _image.size.x).ceil(); _paintArea.left = -_image.size.x * xImages; - _paintArea.right = _canvasSize.x + _image.size.x * xImages; + _paintArea.right = _image.size.x * xImages; } else { _paintArea.left = 0; - _paintArea.right = _canvasSize.x; + _paintArea.right = _image.size.x; } if (_repeat == ImageRepeat.repeatY || _repeat == ImageRepeat.repeat) { final yImages = (_maxTranslation.y / _image.size.y).ceil(); _paintArea.top = -_image.size.y * yImages; - _paintArea.bottom = _canvasSize.y + _image.size.y * yImages; + _paintArea.bottom = _image.size.y * yImages; } else { _paintArea.top = 0; - _paintArea.bottom = _canvasSize.y; + _paintArea.bottom = _image.size.y; } } From d8e7f7e6f1c79ec3bff3590be750c3429981e0de Mon Sep 17 00:00:00 2001 From: DevKage Date: Wed, 7 Jan 2026 20:04:23 +0530 Subject: [PATCH 2/3] Add test --- .../test/assets/image_layer_full_screen.tmx | 17 ++++++ .../test/goldens/image_layer_covers_map.png | Bin 0 -> 36688 bytes .../flame_tiled/test/image_layer_test.dart | 54 ++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 packages/flame_tiled/test/assets/image_layer_full_screen.tmx create mode 100644 packages/flame_tiled/test/goldens/image_layer_covers_map.png create mode 100644 packages/flame_tiled/test/image_layer_test.dart diff --git a/packages/flame_tiled/test/assets/image_layer_full_screen.tmx b/packages/flame_tiled/test/assets/image_layer_full_screen.tmx new file mode 100644 index 00000000000..ebedfb6e649 --- /dev/null +++ b/packages/flame_tiled/test/assets/image_layer_full_screen.tmx @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/flame_tiled/test/goldens/image_layer_covers_map.png b/packages/flame_tiled/test/goldens/image_layer_covers_map.png new file mode 100644 index 0000000000000000000000000000000000000000..a6223ecd778789481ab8e574980bc03c41f931b4 GIT binary patch literal 36688 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 z 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 literal 0 HcmV?d00001 diff --git a/packages/flame_tiled/test/image_layer_test.dart b/packages/flame_tiled/test/image_layer_test.dart new file mode 100644 index 00000000000..47ff28d78ab --- /dev/null +++ b/packages/flame_tiled/test/image_layer_test.dart @@ -0,0 +1,54 @@ +import 'package:flame/cache.dart'; +import 'package:flame/game.dart'; +import 'package:flame_tiled/flame_tiled.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'test_asset_bundle.dart'; +import 'test_image_utils.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + setUp(TiledAtlas.atlasMap.clear); + + group('ImageLayer rendering', () { + test( + 'image layer covers entire map', + () async { + final bundle = TestAssetBundle( + imageNames: [ + 'Tileset_Hexagonal_PointyTop_60x52_60x80.png', + 'images/gear.png', + 'green_sprite.png', + 'red_sprite.png', + ], + stringNames: ['image_layer_full_screen.tmx'], + ); + + final component = await TiledComponent.load( + 'image_layer_full_screen.tmx', + Vector2.all(16), + bundle: bundle, + images: Images(bundle: bundle), + ); + + // The map is 15x15 tiles at 16x16, so the total size is 240x240 + expect(component.size, Vector2(240, 240)); + + // Initialize game context + final game = FlameGame(); + game.onGameResize(component.size); + game.world.add(component); + await component.onLoad(); + await game.ready(); + + final pngData = await renderMapToPng(component); + + expect( + pngData, + matchesGoldenFile('goldens/image_layer_covers_map.png'), + ); + }, + ); + }); +} From 96f7edfe9a1667e1d69a33a05fb087c19314e4ca Mon Sep 17 00:00:00 2001 From: DevKage Date: Wed, 7 Jan 2026 20:43:11 +0530 Subject: [PATCH 3/3] Correct paint area calculations using map size --- .../lib/src/renderable_layers/image_layer.dart | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/flame_tiled/lib/src/renderable_layers/image_layer.dart b/packages/flame_tiled/lib/src/renderable_layers/image_layer.dart index 3dd34cea8fb..e15e1385353 100644 --- a/packages/flame_tiled/lib/src/renderable_layers/image_layer.dart +++ b/packages/flame_tiled/lib/src/renderable_layers/image_layer.dart @@ -15,6 +15,7 @@ class FlameImageLayer extends RenderableLayer { late final ImageRepeat _repeat; final MutableRect _paintArea = MutableRect.fromLTRB(0, 0, 0, 0); final Vector2 _maxTranslation = Vector2.zero(); + late final Vector2 _mapSize; FlameImageLayer({ required super.layer, @@ -24,6 +25,10 @@ class FlameImageLayer extends RenderableLayer { required Image image, super.filterQuality, }) : _image = image { + _mapSize = Vector2( + map.width * destTileSize.x, + map.height * destTileSize.y, + ); _initImageRepeat(); } @@ -76,20 +81,22 @@ class FlameImageLayer extends RenderableLayer { // it still matches up with its initial layer offsets. if (_repeat == ImageRepeat.repeatX || _repeat == ImageRepeat.repeat) { - final xImages = (_maxTranslation.x / _image.size.x).ceil(); + // Calculate images needed for max translation and map size + final xImages = ((_maxTranslation.x + _mapSize.x) / _image.size.x).ceil(); _paintArea.left = -_image.size.x * xImages; _paintArea.right = _image.size.x * xImages; } else { _paintArea.left = 0; - _paintArea.right = _image.size.x; + _paintArea.right = _mapSize.x; } if (_repeat == ImageRepeat.repeatY || _repeat == ImageRepeat.repeat) { - final yImages = (_maxTranslation.y / _image.size.y).ceil(); + // Calculate images needed for max translation and map size + final yImages = ((_maxTranslation.y + _mapSize.y) / _image.size.y).ceil(); _paintArea.top = -_image.size.y * yImages; _paintArea.bottom = _image.size.y * yImages; } else { _paintArea.top = 0; - _paintArea.bottom = _image.size.y; + _paintArea.bottom = _mapSize.y; } }