JavaFX中基于表达式的PathTransitions

在JavaFX中,您可以使用PathTransition对象为路径上的节点设置动画。 PathTransitions使用Shape对象描述它们需要沿其动画的路径。 JavaFX提供了各种类型的形状(例如,多边形,圆形,多边形,路径)。 路径形状很有趣,因为它允许您使用称为PathElement的各种移动来创建复杂的形状。 一些路径元素是ArcTo,CubicCurveTo,HLineTo,LineTo,MoveTo,QuadCurveTo,VLineTo。 他们的名字暗示着他们在做什么。

尽管PathElemetns非常适合描述复杂路径,但我发现我宁愿使用数学表达式来描述我的路径。 在数学课上使用图形的所有岁月影响了我的思维方式。 二次和三角表达式使它们具有温暖和舒适的感觉。 因此,我试图创建使用数学表达式描述的PathTransitions。 如果有人希望达成相同的目标,我会在这篇文章中描述我的解决方案。

为此,首先需要解决数学表达式的方法,例如x * sin(x)或x ^ 2/45或(x ^ 2)/ sin(x-2)或其他方法可以想像。 为此,我很幸运地偶然发现了Lawrence Dol的Software Monkey网站。 Lawrence创建了一个名为MathEval的超轻量Java类 ,该类可评估数学表达式。 该类只有31KB,非常易于使用。 我使用MathEval绘制给定表达式的点。

JavaFx类Polyline用于存储MathEval求解的标绘点,并将它们转换为PathTransition可以将其用作输入的Shape对象。

我最终创建的类称为ExpressionTransitionMaker-抱歉,没有Javadoc,但是您可以在此处找到源代码。 该类应该非常易于使用。 它有两个主要方法值得一提。 第一个是:

public void addExpressionEntry(double start, double end, double poll, GraphType type, String expression) throws IllegalArgumentException;

此方法用于添加表达式条目,该表达式条目由具有支持信息的表达式组成,例如图表上的开始和结束位置,轮询间隔和GraphType。 ExpressionTransitionMaker可以制作此GraphType枚举描述的三种不同类型的图:

public enum GraphType {

        vertical("y"), horizontal("x"), polar("a");
        private String var;

        GraphType(String var) {
            this.var = var;
        }

        public String getVar() {
            return var;
        }
    }

每个表达式条目都需要一个表达式。 对于水平图,表达式的形式必须为f(x); g(y)为垂直; r(a)代表极坐标。 也就是说,水平图需要一个表达式,其中唯一变量是字母“ x”,垂直图需要一个表达式,其中唯一变量是字母“ y”,极坐标图需要一个表达式,唯一的变量variable是字母“ a”,其中“ a”表示弧度的角度。 可以添加多个表达式条目。

顾名思义,水平图和垂直图分别用于分别向左和向右和向上和向下移动的图形。 极坐标图适用于沿圆形或螺旋形路径移动的图形。 如果给定负的轮询值以及适当的起点和终点,则这三个方向都可以朝相反的方向发展。

值得一提的第二种方法是:

public SequentialTransition getSequentialTransition();

因为可以在ExpressionTransitionMaker中添加多个表达式,所以SequentialTransition对象用于播放ExpressionTransitionMaker可以创建的所有PathTransition。 返回的SequentialTransition填充有多个PathTransition,每个添加的表达式一个。 SequentialTransition将按顺序播放其所有过渡。

就是这样。 ExpressionTransitionMaker中还有一个或两个其他公共方法,用户可能会发现它们很方便,但为简洁起见而被忽略。 我创建了一个简单的小应用程序,用于测试ExpressionTransitionMaker,可以在此处找到。 该应用程序可以在浏览器上播放,它允许您输入多个表达式,这些表达式用于使屏幕上的图像动起来。

JavaFX中基于表达式的PathTransitions

如果您有任何反馈意见希望阅读。

参考:来自我们W4G合作伙伴 Jose Martinez的 JavaFX中基于表达式的PathTransitions

翻译自: https://www.javacodegeeks.com/2012/09/expression-based-pathtransitions-in.html