java - 在 libGDX 中是否有 JavaFX 的 PathTransition 等价物?

标签 java javafx libgdx

我们正在从 JavaFX 过渡到 libGDX。想知道是否有等同于 PathTransition 的东西在 libGDX 中。

PathTransition 特别棒的地方在于它会在遍历路径时相应地旋转您的节点。 PathTransition 的不足之处在于需要自己计算速度,也就是说只提供遍历需要多长时间,但需要自己计算出路径有多长,这样才能设置合适的时长.

希望 libGDX 有类似或更好的 PathTransition 改进版本。

最佳答案

根据您发布的示例,我认为 libGDX 中没有直接等效项,但我们可以创建一个。

libGDX 带有一个名为 Scene2d 的场景图它允许您将 Action 应用于 Actor 或 Actor 组。内置了一堆 Action (MoveTo、RotateBy),您可以并行或顺序执行它们。您还可以申请 Interpolation补间类。

libGDX 还附带一个 Path界面,但从 1.9.4 开始,没有 PathAction,但这并不意味着您不能构建如下所示的东西:

package tech.otter.gdxsandbox.demos;

import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.math.CatmullRomSpline;
import com.badlogic.gdx.math.Path;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Action;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Stage;

public class PathDemo extends Demo {
    private ShapeRenderer sr;
    private Stage stage;

    public PathDemo() {
        super("Action Demo");
        stage = new Stage();
    }

    @Override
    public void show() {
        sr = new ShapeRenderer();
        Actor ourCircle = new SimpleCircleActor(sr, 10f);
        stage.addActor(ourCircle);

        ourCircle.addAction(new PathAction(5f, 50f, 50f, 100f, 60f, 300f, 200f, 100f, 400f));
    }

    @Override
    public void render(float delta) {
        sr.setAutoShapeType(true);
        sr.begin();
        sr.set(ShapeRenderer.ShapeType.Filled);
        stage.act(delta);
        stage.draw();
        sr.end();
    }

    @Override
    public void dispose() {
        stage.dispose();
        sr.dispose();
    }

    private class SimpleCircleActor extends Actor {
        private ShapeRenderer renderer;
        private float radius;

        public SimpleCircleActor(ShapeRenderer renderer, float radius) {
            this.renderer = renderer;
            this.radius = radius;
        }

        /**
         * Assumes something outside is setting the ShapeRenderer type/begin/end.
         * Don't do this at home, kids.
         */
        @Override
        public void draw(Batch batch, float delta) {
            renderer.circle(this.getX(), this.getY(), this.radius);
        }
    }

    private class PathAction extends Action {
        private Path<Vector2> path;
        private float current;
        private float duration;
        public PathAction(float duration, float... coordinates) {
            this.duration = duration;
            this.current = 0;

            Vector2[] dataSet = new Vector2[coordinates.length / 2];
            for(int i = 0; i < dataSet.length; i++) {
                dataSet[i] = new Vector2(coordinates[2*i], coordinates[2*i+1]);
            }
            this.path = new CatmullRomSpline<Vector2>(dataSet, true);
        }
        @Override
        public boolean act(float delta) {
            if(duration == current) return true; // The action has already completed.

            if(current + delta >= duration) {
                current = duration;
            } else {
                current += delta;
            }

            Vector2 out = new Vector2(); // Get our position on the path.
            this.path.valueAt(out, current / duration);
            this.actor.setPosition(out.x, out.y);

            return duration == current; // Return whether we are now complete.
        }
    }
}

关于java - 在 libGDX 中是否有 JavaFX 的 PathTransition 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40856530/

相关文章:

java - jcifs.smb.SmbAuthException : Logon failure: unknown user name or bad password. 错误

java - Neo4j 中的 Dijkstra 变体 - 查找所有路径

java - Surefire 重新运行失败的测试不起作用

css - JavaFX 和 CSS RadioButton 样式

java - Gradle OpenJFx11 : Error - JavaFx runtime components are missing

JavaFX TitledPane : Remove Title

android - Android 上的 GdxRuntimeException : couldn't load shared library 'gdx' for target

java - 字体问题需要更改

gradle - 如何使用 Gradle 构建 BaseGameUtils Android 项目?

Android+LibGDX - 只有在完成 Libgdx Activity 后,纹理才会在 Android UI Activity 中消失?