Android 上 Flame Flutter 上图块之间的线条

问题描述 投票:0回答:1

在我尝试制作的游戏中,图块之间似乎有闪烁的白线。仅当我移动时才会出现闪烁的线条,就像相机移动一样。我正在使用:

颤动:3.16.5

火焰:^1.13.1 Flame_forge2d:^0.16.0+3 火焰音频:^2.1.6 火焰平铺:^1.18.2

我在之前的项目中使用了几乎相同的代码,并且在 android 构建中没有遇到这个问题。然而,这一次,在最新版本的所有内容中,我在 android 版本中遇到了这个问题。我知道这在 Web 构建中很常见,我以前在 Web 中遇到过这种情况,但这是我第一次在 Android 中遇到这种情况。任何帮助将不胜感激!

flicker of white line after first platform block

flicker of white lines on tallest of stairs

class MapLevel extends Component with HasGameRef<MainGame> {
  MapLevel({required this.level}) : super();

  int level;

  late Vector2 mapSize;
  

  @override
  FutureOr<void> onLoad() async {
    TiledComponent map = await TiledComponent.load(
        'map$level.tmx', Vector2.all(32) / 10,
        priority: 20);
    add(map);
    mapSize = map.scaledSize;

    final spawnLayer = map.tileMap.getLayer<ObjectGroup>('spawn');

    final platformLayer = map.tileMap.getLayer<ObjectGroup>('platforms');

    for (final platform in platformLayer!.objects) {
      game.world.add(Platform(
        position: Vector2(platform.x / 10, platform.y / 10),
        size: Vector2(platform.width / 10, platform.height / 10),
      ));
    }

    for (final spawn in spawnLayer!.objects) {
      if (spawn.class_ == 'player') {
        var player = Player(
            spawnPosition: Vector2(spawn.x / 10, spawn.y / 10),
            size: Vector2(spawn.width / 10, spawn.height / 10) * 0.8);
        await game.world.add(player);
        game.player=player;
        game.camera.follow(player);
      }
    }

    game.camera.viewfinder.zoom = (game.canvasSize.x / mapSize.y);

    // game.player?.cameraFollow();
    return super.onLoad();
  }


  

}
flutter dart tiled flame forge2d
1个回答
0
投票

这是游戏开发中的常见问题,不仅在 Flutter 和 Flame 中存在,它被称为鬼线,来自计算机中浮点数的不精确性。 您可以在本期中阅读更多相关信息,并且可以在此处找到解决方法。

在解决方法中,您需要做的是在图块之间创建一个空间距,因为舍入误差通常会使像素紧挨着它,如果我们向图块添加间距,即使发生舍入误差,纹理采样将选取一个透明像素。

您可以使用tile patcher工具来执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.