【问题标题】:Flip horizontally and vertically single frames of an animated sprite水平和垂直翻转动画精灵的单帧
【发布时间】:2019-09-04 22:00:58
【问题描述】:

我有 4 个(0-3 个动画帧)不同的硬币动画图像,它们旋转的不同状态。我想通过添加另外 2 帧 (4-5) 让它看起来像在旋转,让它看起来像在旋转。在当前情况下,硬币看起来像旋转了 180 度并回到原来的位置。我只想垂直翻转第 4 帧和第 5 帧。我如何在不制作新的冗余 png 的情况下实现这一目标?

我知道在这种情况下制作 2 个新的 png 并不是什么大问题,但如果我有更多的帧和/或更大的精灵,它可能会对未来的项目产生重大影响。

【问题讨论】:

    标签: godot gdscript


    【解决方案1】:

    我在想你可以让动画在达到最后一个成名时水平翻转,但这意味着你必须省略 #4 和 #5 以避免重复,但它仍然看起来很奇怪,因为第 3 帧会跳过直接回到帧#0。我尝试考虑可以放置精灵帧的不同顺序来清理它,但我所有的解决方案要么导致重复帧,要么导致丑陋的跳过。也许你能解决我不能解决的问题。

    不幸的是,虽然 Godot 支持 animation_player 节点的 play_backwards 功能,但对于 animated_sprite 却没有这样的功能。太糟糕了,因为这可能会解决您的问题。

    目前,我认为你最好的办法是做你试图避免的事情。你自己翻转精灵图像并将它们添加为动画帧,或者制作一个包含翻转精灵的单独动画并让它们来回切换在他们的最后一帧之后,分别。对于超大型项目来说,这可能需要做很多工作,但是如果没有针对动画精灵的某种 play_backwards 功能,我认为这次尝试寻找解决方法是不值得的。

    当然,如果我错了,我欢迎社区的任何纠正。

    祝你好运。

    【讨论】:

      【解决方案2】:

      这是完成任务的一种方式。

      godot write的ready函数内部

      #used to store frame value
      var frame = 0
      

      在您使用的每帧运行的函数中写入:

      frame += 1
      
      #resets the value representing the current frame
      if frame > 5:
          frame = 0
      
      if frame == 4 || frame == 5:
          #this should be whatever function you use to flip the sprite vetically
          flip_h = true 
      else:
          #this should be whatever function you se to flip the sprite horizontally
          flip_h = false
      

      【讨论】:

        【解决方案3】:

        您可能已经知道这一点,因为我知道这个截图来自 udemy 课程,因为我现在正在做这件事,这在课程后面会解释(添加钉枪敌人时)。但是对于那些不知道的人,可以通过添加一个AnimationPlayer并添加处理AnimatedSprite的动画flip_h属性的新动画轨道来解决。然后你必须在最后 2 个重复的帧上设置 flip_h。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-07
          • 1970-01-01
          • 1970-01-01
          • 2015-03-16
          相关资源
          最近更新 更多