【问题标题】:Additive tweens with Universal Tween Engine in libgdx?libgdx中使用通用补间引擎的加法补间?
【发布时间】:2013-03-11 01:34:48
【问题描述】:

我有一个循环补间的精灵,就像一个空闲动画。我想给它添加另一个补间,这样它们就可以同时播放了。 (例如,如果我的第一个补间将其向上移动,而我的第二个补间将其向右移动,我希望它向上和向右移动。)

但每当我播放第二个补间时,它似乎完全覆盖了第一个补间。 我做错了什么?

这是我的代码:

Tween.to(sprTurtle, SpriteAccessor.POS_XY, 0.4f)
    .waypoint(posTurtle[0] + (20 * density), posTurtle[1] + (20 * density))
    .target(posTurtle[0] + (30 * density), posTurtle[1])
    .ease(Quad.INOUT)
    .path(TweenPaths.catmullRom)
    .repeatYoyo(Tween.INFINITY, 0)
    .delay(0.1f)
    .start(tweenManager);
Tween.to(sprTurtle, SpriteAccessor.POS_XY, 1f)
    .target(50, 50)
    .repeat(Tween.INFINITY, 0)
    .start(tweenManager);  

【问题讨论】:

标签: java android libgdx


【解决方案1】:

此代码将在 cont2 中生成图像,这是一个 ViewContainer,首先从 (0,100) 依次移动到 (100, 100)。

        Timeline.createSequence()
        .push(Tween.set(cont2, ViewContainerAccessor.POSITION_XY))
        .push(Tween.to(cont2, ViewContainerAccessor.POSITION_XY, 0.5f).target(0,100))
        .push(Tween.to(cont2, ViewContainerAccessor.POSITION_XY, 0.5f).target(100,100))
        .start(tweenManager);

在我的代码中,图像先向下,然后向右。

也许你的代码应该是这样的

    Timeline.createSequence()
    .push(Tween.to(sprTurtle, SpriteAccessor.POS_XY, 0.4f)
        .waypoint(posTurtle[0] + (20 * density), posTurtle[1] + (20 * density))
        .target(posTurtle[0] + (30 * density), posTurtle[1])
        .ease(Quad.INOUT)
        .path(TweenPaths.catmullRom)
        .repeatYoyo(Tween.INFINITY, 0)
        .delay(0.1f))
    .push(Tween.to(sprTurtle, SpriteAccessor.POS_XY, 1f)
        .target(50, 50)
        .repeat(Tween.INFINITY, 0))
    .start(tweenManager);

如果您确实希望两个图像同时移动,则必须制作两个 ViewContainer 以便它们可以同时移动。

official demo apkMainActivity.java 中,您可以看到以下代码。我添加了LinearLayout genueHamster2VieewContainer cont2 来同时移动两个图像。

  private LinearLayout genueHamster;
  private LinearLayout genueHamster2; // I add another LinearLayout so we could have
                                      // two images at the same time.

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Setup it
    // a linearlayout in activity_main.xml
    genueHamster = (LinearLayout) findViewById(R.id.main_cont);
    // add for second image        
    genueHamster2 = (LinearLayout) findViewById(R.id.main_cont_2);
    setTweenEngine();
  }

  public void startAnimation(View v) {

    // Create object which we will animate
    ViewContainer cont = new ViewContainer();
    // Add a new container for the second image.
    ViewContainer cont2 = new ViewContainer();
    // pass our real container
    cont.view = genueHamster;
    // put it into the second container
    cont2.view = genueHamster2;

    // /start animations

    // Now you can have two images moving at the same time.
    Tween.to(cont, ViewContainerAccessor.POSITION_XY, 0.5f)
            .target(500, 0).ease(Bounce.OUT).delay(1.0f)
            .start(tweenManager);               

    Tween.to(cont2, ViewContainerAccessor.POSITION_XY, 0.5f)
            .target(0, 500)
            .ease(Bounce.OUT)
            .delay(1.0f)
            .repeatYoyo(2, 0.5f)
            .start(tweenManager);

  }

【讨论】:

  • 提问者正在寻找一种同时执行两个补间的方法,而不是按顺序执行。考虑修改以使您的补间同时发生,或者如果您认为不可能,至少解释为什么它不可能。
【解决方案2】:

您正在寻找的是Timeline.createParallel 方法。

【讨论】:

    猜你喜欢
    • 2014-03-15
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多