当前位置: 首页 > 知识库问答 >
问题:

做动画的“Java”方式

翟渝
2023-03-14

我想用Java做动画。我看过:http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html

令我惊讶的是,在计时器操作处理程序中:

  • 我们实际上并不绘制函数调用;我们只是更新状态——因此计时器动作似乎用于“模拟”

我觉得这有点奇怪,因为:

  • Swing可以将多个重绘请求整理成一个请求
  • 如果我在计时器中计算fps,我可能会计数过多(因为多个重绘变成一个)

问:我是否误读了示例代码,或者这是用Java制作动画的“正确”方法

谢谢

共有3个答案

钮刚洁
2023-03-14

你可能想试试三叉戟。它是一个干净简单的动画库,没有很多的铃铛和口哨,如果你尝试在Swing中制作动画,它会让你的生活变得更加轻松。

乜建柏
2023-03-14

就“动画”而言,JavaFX要比Java好得多,因为它主要是为了这个目的而构建的

朱风史
2023-03-14

单独进行状态更新和渲染是相当正常的。

Java/Swing在这方面非常正常。

原因:

  • 很多事情都可以更新状态(计时器事件、用户输入等),因此可以非常轻量级地进行更改,并将其与屏幕刷新分离,以便您可以随时进行更改
  • 您通常希望屏幕刷新以与模型状态更新不同的速率运行。通常,您希望动画/状态更新有固定的间隔,但希望屏幕刷新尽可能快。如果在动画中进行插值,则尤其如此
  • 渲染通常需要在特定上下文中进行(在本例中为Swing UI线程)。您不一定希望将状态更改限制为仅在此上下文中发生
  • 将视图(屏幕显示)与数据模型分开是一种很好的做法。除了具有良好的概念设计区别外,这还允许您独立于显示器测试数据模型、在没有GUI的服务器上运行模型版本等
 类似资料:
  • 我正在用Java编写一个游戏,我开始使用drawRect()方法来表示玩家、敌人和射击。一切都很好。然后我决定试着装腔作势。我发现自己在创造。每个对象的png图像,并使用Graphics2D drawImage()方法。一切开始放缓。有没有其他方法可以加快这一进程? 我的动画基于摆动计时器 有关于动画的提示或教程吗?谢谢

  • 我一直在使用Swing编写一个简单的动画,其中有一个JFrame,只要JFrame收到鼠标点击,就会开始一个涟漪动画。我使用一个内部动画类,该类为每个动画扩展JPanel,以防同时播放多个动画(我不知道这是否是最好的方式)。当我单击时,我向JFrame添加一个新动画,并将单击的坐标传递给动画。但是,动画重绘/绘制组件方法不起作用。在我的理解中,repaint应该调用paint/paintCompo

  • 因此,我正在创建一个基本的应用程序,我希望在屏幕底部有一个JLabel,从左下角开始,在设定的时间内移动到右下角,动画风格,并在中心有一个静态图像。为此,我使用BorderLayout创建了一个带有JPanel的JFrame。在BorderLayout.Center中添加了一个带有ImageIcon的JLabel,在BorderLayout.South中添加了一个JPanel。我的代码虽然编写得很

  • 无单位数值 如果原始值具有单位,则它将自动添加到动画值中。 Type Example Number translateX: 250 anime({ targets: '.unitless-values-demo .el', translateX: 250, // -> '250px' rotate: 540 // -> '540deg' }); 有单位数值 强制动画使用某个单位并自动转

  • 本文向大家介绍使用RN Animated做一个“添加购物车”动画的方法,包括了使用RN Animated做一个“添加购物车”动画的方法的使用技巧和注意事项,需要的朋友参考一下 最近在选座的新项目中试用了一下 React Native,熟悉新框架的同时,可以略微将交互效果和 Native 看齐了。 分享一下项目本身比较重要的一个交互动画的做法, RT。 这次我们就不装大象了,因为我真的买了冰箱 =,

  • 我被这个问题困住了,不知道该把手伸向何处。我必须用javascript绘制公式的图形动画 我什么意思? 知道了y(例如y=10),我想让图从(0;0)开始直到(x;10),遵循等式。我还想创建一个按钮,可以在动画过程中单击,并告诉我在那个精确的时刻y是图 现在,多亏了Chart.js,我设法做到了这一点: JS HTML 结果 现在我只有图形,没有动画,我不能选择最大y 我该怎么办?