【问题标题】:Bug on some devices with animation using flutter and flame某些设备上使用颤振和火焰动画的错误
【发布时间】:2021-12-25 07:48:47
【问题描述】:

基本上,我在根据我看到的教程从游戏创建的应用程序中遇到问题,但是,我的角色动画在某些设备上存在错误,而在其他设备上运行正常,如下维京动画动画在某些设备上的显示方式正确:

和 Viking 在某些设备上的动画错误(几乎总是出现不止一个 Viking,而且动画有问题):

我正在使用的 spritesheet 有 256x144 像素的维京人图像,其中前 29 帧是他在奔跑,其余的他在跳跃(空闲)遵循在 Flutter 中定义维京人动画的代码行:

viking.dart 文件中的部分动画:

enum VikingAnimationStates {
  Idle,
  Run,
  Kick,
  Hit,
  Sprint,
}


class Viking extends SpriteAnimationGroupComponent<VikingAnimationStates>
    with Hitbox, Collidable, HasGameRef<VikingRun> {
  
  static final _animationMap = {
    VikingAnimationStates.Idle: SpriteAnimationData.sequenced(
      amount: 19,
      stepTime: 0.1,
      textureSize: Vector2.all(256),
      texturePosition: Vector2(7424, -90), //29*256
    ),
    VikingAnimationStates.Run: SpriteAnimationData.sequenced(
      amount: 29,
      stepTime: 0.034,
      textureSize: Vector2.all(256), 
      texturePosition: Vector2(0, -90), 
    ),
    VikingAnimationStates.Kick: SpriteAnimationData.sequenced(
      amount: 4,
      stepTime: 0.1,
      textureSize: Vector2.all(256),
      texturePosition: Vector2(0, -90), 
    ),
    VikingAnimationStates.Hit: SpriteAnimationData.sequenced(
      amount: 3,
      stepTime: 0.1,
      textureSize: Vector2.all(256),
      texturePosition: Vector2(0, -90),
    ),
    VikingAnimationStates.Sprint: SpriteAnimationData.sequenced(
      amount: 7,
      stepTime: 0.1,
      textureSize: Vector2.all(256),
      texturePosition: Vector2(0, -90),
    ),
  };



  Viking(Image image, this.playerData)
      : super.fromFrameData(image, _animationMap);

我在 viking_run.dart 文件中的游戏中创建维京人的部分:

_viking = Viking(images.fromCache('spritesheet viking 48 frames 256x144.png'),
    playerData);

而且两台设备上的android版本都是一样的

【问题讨论】:

  • 你的texturePositions 有点奇怪,为什么你的-90 是你的?在空闲状态下发生了什么,你说它有 19 帧,但从texturePosition 我假设它从右下角开始,应该只有一帧?
  • 嗯,-90的贴图位置是给维京人留在地上,如果我不放这个他就一直漂浮在屏幕上,空闲状态基本上是他跳的时候,在哪里位于他跑的同一个spritesheet中,前29帧由他跑组成,其余的帧,直到第48帧由“空闲”状态组成,就像角色的跳跃动画一样,这 19 这个状态的帧数
  • 我真的不明白如果你将texturePosition 设置为负数会发生什么,它应该是精灵表中的一个坐标。尝试删除它 (Vector2(0, 0)) 是默认设置。然后尝试设置维京人的position。如果您需要实时帮助,可以加入我们的 Discord。 discord.com/invite/pxrBmy4
  • 好吧,我进入了你的不和谐,我试图像你说的那样在所有动画中将 texturePosition 更改为 0,但问题仍然出现在某些设备上,动画被窃听这个问题很奇怪,我花了几周的时间试图弄清楚,但我真的不明白为什么会发生这种情况
  • 在Flame频道写点东西,我会帮你的:)

标签: android flutter animation flame


【解决方案1】:

你说你的精灵在精灵表中是 256x144,但你使用了textureSize: Vector2.all(256)。请尝试将其更改为 Vector2(256, 144)

同样texturePosition 不应该是负数,它定义了精灵表中的位置。由于您的精灵表中只有一行精灵,您应该始终将 y 设置为 0,然后您可以更改 x 以指定每个动画序列的开始位置。

【讨论】:

    猜你喜欢
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2020-09-07
    • 2014-10-23
    • 2021-03-30
    • 1970-01-01
    • 2022-10-08
    相关资源
    最近更新 更多