`
quakezh
  • 浏览: 19573 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javaFX的Timeline学习

阅读更多
javafx.animation.Timeline是javaFX中用来实现动画的基本手段;
Timerline不同于javafx.async.Task, 后者是使用独立线程来支持的, 而前者是执行在EDT(事件派发线程/主线程)中的;
javafx中, 所谓动画, 其基本思路是就是一组基于时间的变量, 而这些变量又与程序中的其他部分(如UI中的属性等)相绑定(bind),
如此, 当变化开始或曰时间启动时(Timeline.play()), 动画就形成了. 整个概念简洁而富于抽象, 本人十分欣赏.

以下总结了Timeline的主要用法:

var slider1: Number;
Timeline {
    repeatCount: 1
    keyFrames: [
        KeyFrame {  //start point
            time: 0s
            canSkip: true
            values: [
                slider1 => 20.0
            ] 
        } 
        KeyFrame {  //end point
            time: 5s
            canSkip: true
            values: [
                slider1 => 100.0 tween Interpolator.LINEAR
            ] 
        } 
    ] //close keyFrames
}.play();  

Stage {...}


省略掉第一个keyFrame后的写法:
var slider1: Number  = 20;
Timeline {
    repeatCount: 1
    keyFrames: [
        /* end position of red rectangle and type of movement */
        KeyFrame {
            time: 5s
            canSkip: true
            values: [
                slider1 => 100.0 tween Interpolator.LINEAR
            ] //close values

        } // close KeyFrame

    ] //close keyFrames

}.play();

使用at表达式:
var slider1: Number  = 20;
Timeline {
  repeatCount: 1  
  keyFrames: [
  at (5s) {slider1 => 100.0 tween Interpolator.LINEAR} //end point only
  ]; 
}.play();

使用action域:
var t = Timeline {
    repeatCount: 1
    keyFrames: [
         KeyFrame { time:0s action: function(){ t1.t.playFromStart(); } },
         KeyFrame { time:1s action: function(){ t2.t.playFromStart(); } },
    ]
}


以下是自己做的一个基于Timeline的Timer部件
class myTimer {
...
    public-read var stCur : Integer = 0;
    var stActive : Boolean = false;
    var stHandler : function();
    def stageTimer = Timeline {
        repeatCount: Timeline.INDEFINITE
        autoReverse: false
        keyFrames: [
            KeyFrame {
                time: 1s
                action: stCallback
                }
            ]
        };

    //开始计时器
    //span: 计时器时间跨度(秒)
    public function stBegin(span:Integer) : Void {
        if(not stActive) {
            stCur = span;
            stActive = true;
            stageTimer.play();
        }
    }
    public function stStop() : Void {
        if(stActive) {
            stageTimer.stop();
            stActive = false;
            }
    }
    public function stSetHandler(f:function()) : Void {
        stHandler = f;
    }
    protected function stCallback() : Void {
        stCur--;
        if(stHandler!=null) {
            stHandler();
            }
    }
...
}

可以这样来使用

def _tm = myTimer {};
_tm.stSetHandler(function() {
    if(_tm.stCur<=0) {
        _tm.stStop();
        }
    });

此Timer的缺点是, 需要由调用者从外部停止!不知道那位大侠有兴趣帮助优化一下,改为可以自己终止最好。

分享到:
评论

相关推荐

    JavaFX学习资料总结

    1. Timeline和AnimationTimer:JavaFX提供Timeline类用于创建基于时间的动画,AnimationTimer则可以实现高精度的定时任务。 2. 动画类型:包括旋转(RotateTransition)、缩放(ScaleTransition)、平移...

    JavaFX学习之样例8

    这个"JavaFX学习之样例8"可能是一个教程或示例集合,用于教授如何使用JavaFX来创建一个特定的图形元素,比如时钟。在这个例子中,我们可能将学习如何利用JavaFX的图形和动画功能来构建一个可交互的模拟时钟。 首先...

    JavaFx 入门文档,JavaFx实例

    本文将深入探讨JavaFX的基础知识,包括其核心概念、开发环境的搭建、基本组件的使用,以及如何通过实例来学习和掌握JavaFX。 首先,JavaFX的核心概念主要包括场景(Scene)、舞台(Stage)、节点(Nodes)和布局...

    JavaFX2.0内建控件教程(全部控件)

    import javafx.animation.Timeline; import javafx.util.Duration; import javafx.scene.control.Button; import javafx.scene.text.Font; import javafx.scene.effect.Reflection; Button button = new Button(); ...

    JAVAFX的贪吃蛇以及可以用Swing打开的JAVAFX的贪吃蛇

    3. **动画与定时器**:JavaFX的Timeline或AnimationTimer类可以用于实现游戏中的动态效果,如蛇的移动。定时器会在特定间隔触发,更新游戏状态并重绘屏幕。 4. **游戏逻辑**:贪吃蛇游戏的核心逻辑包括蛇的移动、...

    javafx版本植物大战僵尸

    在动画和时间管理方面,JavaFX的Timeline和Animation类提供了强大的工具。开发者可能利用这些类创建游戏中的动画效果,如植物的种植过程、僵尸的移动和攻击动作等,以保持游戏的流畅性和节奏感。 性能优化也是...

    javaFX 学习资料

    JavaFX 是一个用于创建桌面和移动应用程序的Java平台,它提供了丰富的用户界面工具包和功能,使得开发者可以构建出美观且交互性强的应用...通过学习和掌握JavaFX,开发者可以创建出具有现代感和交互性的桌面应用程序。

    JavaFX的piano应用

    - 为了增加用户体验,JavaFX提供了`Timeline`和`Transition`类来实现动画效果。例如,按键按下时可能会有颜色变化或大小缩放的动画。 6. **响应式设计**: - 如果应用要考虑不同屏幕尺寸和设备,那么JavaFX的响应...

    JavaFX播放视频(flv)例子

    对于更复杂的多媒体应用,你还可以探索JavaFX的`Timeline`和`Animation`类,以实现更丰富的交互效果。 总之,这个"JavaFX播放视频(flv)例子"是一个很好的起点,可以帮助你掌握JavaFX的基本用法,并且逐步了解如何...

    精致javaFX模拟时钟

    这个"精致javaFX模拟时钟"示例是学习JavaFX的一个很好的起点,因为它展示了如何利用JavaFX丰富的图形功能来创建一个美观且功能完整的时钟。 在JavaFX中,你可以使用`Scene`对象作为应用程序的主要内容区域,而`Node...

    JavaFx本质论源代码

    总的来说,"JavaFX本质论源代码"是一份宝贵的资源,它涵盖了JavaFX的主要特性和使用技巧,对于想要深入了解和实践JavaFX的开发者来说,是一个极好的学习资料。通过仔细研究这些源代码,你可以掌握如何有效地利用...

    JavaFX 8官方指导

    通过学习本书,开发者不仅可以掌握如何利用JavaFX提供的丰富UI组件来快速搭建界面,还能深入了解JavaFX API的各种特性和功能,从而更好地进行实际项目开发。此外,书中还提到了关于版权、许可以及特定情况下适用的...

    JAVAFX 开发安全倒计时

    在本项目中,我们将深入探讨如何使用JavaFX开发一个安全相关的倒计时小工具,这对于新手开发者来说是一个很好的学习起点。 一、JavaFX基础知识 JavaFX提供了丰富的UI组件和强大的2D/3D图形功能,它取代了早期的...

    javaFx版泡泡龙和

    总的来说,JavaFX版泡泡龙的开发涵盖了Java编程、图形界面设计、游戏逻辑实现等多个方面,对于学习和掌握JavaFX技术以及提升游戏开发能力都有很大帮助。通过阅读和分析项目的源码,可以深入理解上述知识点的具体应用...

    javafx画板-源码

    此外,JavaFX还提供了一些高级特性,如Transitions(过渡动画)和Timeline(时间线),可用于创建平滑的动画效果。例如,可以使用Transition来改变图形的颜色或位置,使用户界面更加动态和交互。 在项目的实现过程...

    javaFX 飞机游戏

    在这个“javaFX 飞机游戏”项目中,开发者利用 JavaFX 的特性构建了一个飞机大战游戏,旨在学习和掌握 JavaFX 的用法。 首先,`Shooter.iml` 文件是 IntelliJ IDEA 创建的项目配置文件,它包含了项目的模块信息,如...

    javaFX 3D小例子

    总之,"javaFX 3D小例子"是一个学习和实践JavaFX 3D API的好项目。通过这个示例,你可以了解到如何使用JavaFX创建3D图形,包括创建3D对象、组织3D场景、添加光照效果、控制视角以及实现动态动画。这将有助于提升你在...

    javafx开发的RPG游戏,可以学到很多东西

    JavaFX的Timeline和Transition类可以帮助实现这些效果,让角色移动、攻击、技能施放等动作更加流畅。 6. **数据持久化**:RPG游戏可能涉及角色的等级、装备等数据,这些需要在游戏关闭后保存。JavaFX可以与Java的...

    javafx-8u131-apidocs

    总的来说,`javafx-8u131-apidocs`是开发者学习和使用JavaFX 8u131的重要参考资料,涵盖了从基础组件到高级特性的全方位介绍。通过深入理解这些API,开发者可以构建出高效、美观且功能强大的JavaFX应用程序。

Global site tag (gtag.js) - Google Analytics