某些使用颤动和火焰进行动画的设备上的错误

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

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

以及维京人在某些设备上的动画错误(几乎总是出现不止一个维京人,动画也有很多问题):

我使用的 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版本是相同的

android flutter animation flame
2个回答
0
投票

你说你的精灵在精灵表中是256x144,但你使用了

textureSize: Vector2.all(256)
。尝试将其更改为
Vector2(256, 144)

此外,

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


0
投票

我也有同样的问题。你解决这个问题了吗?

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