Scene2d vs Sprites

时间:2013-10-27 02:37:55

标签: android libgdx actor scene2d

所以我目前正在设计一款游戏,其主要思想是你选择你的攻击,然后根据你选择的攻击(想想口袋妖怪)播放动画。游戏也是回合制的。

我的问题是scene2d是否比实现用于处理游戏动画部分的自定义解决方案更容易使用。从我读过的内容(我发现很难在scene2d上找到好的信息),听起来像scene2d会让设计按钮/菜单的UI非常容易,但我不知道怎么能滚动它让演员动起来。它是否像处理按钮上的触摸事件一样简单,并根据玩家的选择调用相应的actor的动作方法?

在我的想法中,演员们从未真正移动过(除了他们的动画期间他们不会在屏幕上移动,他们只是通过他们的动画到位)。在动画期间,还会有粒子效果(攻击),如果使用scene2d,则需要成为他们自己的actor。是否难以产生演员和攻击的同步?

3 个答案:

答案 0 :(得分:2)

演员们动起来......

actor.addAction(Actions.moveTo(posX, posY, 5)));

通过这个你的演员移动到posX,posY和5是持续时间..

使用scene2d在我看来是个好主意..

答案 1 :(得分:0)

Scene2D会更好,因为你必须在使用Sprite时手动实现诸如Click之类的操作的监听器,而Scene2D提供设置监听器的功能。

答案 2 :(得分:0)

您可能已经知道这一点,但让我试着回答您的问题:

Scene2d有一个非常方便的action system,它基本上允许以下内容:

  1. 执行provided actions
  2. 中的任何一项
  3. 使用众多provided interpolations
  4. 对其进行微调
  5. 使用Actions.run()
  6. 制作新动作
  7. 链接现有行为形成序列
  8. 像这样:

    import com.badlogic.gdx.scenes.scene2d.actions.Actions;
    import com.badlogic.gdx.scenes.scene2d.Action;
    Action a1 = Actions.sequence(Actions.fadeOut(0), Actions.fadeIn(3, Interpolation.bounce));
    Action a2 = Actions.moveTo(100, 200, 3, Interpolation.pow2Out);
    Runnable r = new Runnable() {
        @Override
        public void run() {
            setColor(1, 0, 0, 1);
            System.out.println("now I'm a red actor");
        }
    };
    

    然后然后合并,例如:

    addAction(Actions.sequence(Actions.parallel(a1, a2), Actions.run(r)));
    

    这使您可以从scene2d的内置音序器中获益,至少可以节省一半的工作量。所以,回答你的问题,我认为使用这个系统很容易实现固定以及被动/随机动画。它还允许您轻松地将更简单的操作封装到更复杂的操作中,并具有以下优点:

    • 非常易读且易于维护的代码
    • 权衡CPU /内存:比存储普通序列甚至视频更节省内存
    • 反应性:通过这种方式,您可以将动画编程为每次稍有不同

    另一方面,如果你经常想要发现"这个开发系统会变得非常耗时。事情,如下:

    • 自己实施基于时间的动作,不是内置的(如相机旅行)
    • 如果内置的内容不适合您的目标,请进行自己的插值
    • 使用许多小颗粒元素(为此我会使用ParticleEditor)。

    我不认为你的情况。作为最后一句话,你应该看一下spine animation engine。我自己不会使用它,但可能对你的想法很有用。