在我尝试制作的游戏中,图块之间似乎有闪烁的白线。仅当我移动时才会出现闪烁的线条,就像相机移动一样。我正在使用:
颤动:3.16.5
火焰:^1.13.1 Flame_forge2d:^0.16.0+3 火焰音频:^2.1.6 火焰平铺:^1.18.2
我在之前的项目中使用了几乎相同的代码,并且在 android 构建中没有遇到这个问题。然而,这一次,在最新版本的所有内容中,我在 android 版本中遇到了这个问题。我知道这在 Web 构建中很常见,我以前在 Web 中遇到过这种情况,但这是我第一次在 Android 中遇到这种情况。任何帮助将不胜感激!
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 和 Flame 中存在,它被称为鬼线,来自计算机中浮点数的不精确性。 您可以在本期中阅读更多相关信息,并且可以在此处找到解决方法。
在解决方法中,您需要做的是在图块之间创建一个空间距,因为舍入误差通常会使像素紧挨着它,如果我们向图块添加间距,即使发生舍入误差,纹理采样将选取一个透明像素。
您可以使用tile patcher工具来执行此操作。