【问题标题】:How to do animation using swing and clojure?如何使用swing和clojure做动画?
【发布时间】:2010-05-26 13:51:46
【问题描述】:

我正在尝试为棋盘中的棋子设置动画。首先,我创建了一个 java.util.Timer 对象,它“scheduleAtFixedRate”将 TimerTask 实现为代理函数。所以我保留了要移动的部分的记录(piece-moving-record),并且当它是适当的(当用户使用鼠标移动部分时)TimerTask 代理函数应该测试记录是否不为零并执行部分-移动功能。棋子移动函数只是根据预先计算的向量更新棋子的 x 和 y 坐标。我在一块移动记录上放了一个附加表,所以当它改变时,它应该重新绘制板(画布)。 paint 方法测试这个piece-moving-record 是否为nil 来绘制它。

问题是动画没有出现。片子只是跳到命运,之间没有动作。动画方案有问题,有更好的方法吗?

【问题讨论】:

    标签: java swing animation clojure


    【解决方案1】:

    应在事件调度线程 (EDT) 上更新 Swing 组件。因此,您应该使用 Swing Timer,因为在 Timer 触发时执行的任何代码都将在 EDT 上执行。

    您所要做的就是设置棋子的位置,它会自动重新绘制自己。

    阅读 How to Use Timers 上的 Swing 教程部分了解更多信息。

    【讨论】:

    • 你是对的,移动现在有效但仍然不够流畅,会更多地检查挥杆计时器。谢谢你的回答。
    • 不要必须使用 Swing Timer 来为组件设置动画。您可以使用您想要的 whatever 实用程序设置一个计时器,然后使用 SwingUtilities.invokeLater(或 invokeAndWait)将执行传递给 EDT。跨度>
    【解决方案2】:

    Swing 不会自动生成动画,不管你有没有计时器。如果您想为运动设置动画,您需要一次将作品移动一段距离,并在每次移动时重新绘制画布,这样就可以产生运动的错觉。

    【讨论】:

    • 这正是我正在做的,当块移动时,通过add-watch调用画布的重绘方法。
    【解决方案3】:

    您可以使用 Trident 库:Here

    【讨论】:

    • 应该试试,clojure with swing 对我来说似乎很难。
    【解决方案4】:

    JDK 中有一个 Animator 演示。它使用 awt 但它应该会给你一些想法。

    jdk1.6.0_20\demo\applet\Animator

    【讨论】:

      【解决方案5】:

      另一个想法可能是查看 processing.org 中的处理可视化框架。它是一种简单但功能强大且文档齐全的动画和可视化编程语言。 API 非常简单,并且有一个非常透明的 Clojure 包装器,名为 Rosado

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-08
        • 2011-01-18
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        相关资源
        最近更新 更多