栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

摇摆动画优化

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

摇摆动画优化

在与Yago进行了精彩的讨论之后,我发现问题围绕多个领域展开,很大程度上归因于Java将更新与操作系统和硬件同步的能力,有些是您可以控制的,有些是无法控制的。

受到Yago的示例以及我关于“计时框架”工作原理的“记忆”的启发,我通过提高帧速率(至5毫秒,〜=
200fps)并减小变化增量来测试代码,结果与使用“计时框架”相同,但这使您拥有了原始设计的灵活性。

import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JComponent;import javax.swing.Jframe;import javax.swing.SwingUtilities;import javax.swing.Timer;public class Test {    public static void main(String[] args) {        new Test();    }    public Test() {        SwingUtilities.invokeLater(new Runnable() { @Override public void run() {     Jframe frame = new Jframe("Test");     frame.add(new AnimationComponent(0, 0, 50, 50));     frame.setSize(300, 300);     frame.setLocationRelativeTo(null);     frame.setVisible(true); }        });    }    public class AnimationComponent extends JComponent implements ActionListener {        private Timer animTimer;        private int x;        private int y;        private int xVel;        private int yVel;        private int width;        private int height;        private int oldX;        private int oldY;        public AnimationComponent(int x, int y, int width, int height) { this.x = x; this.y = y; this.height = height; this.width = width; animTimer = new Timer(5, this); xVel = 1; yVel = 1; animTimer.start();        }        @Override        public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); RenderingHints hints = new RenderingHints(         RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON ); g2d.setRenderingHints(hints); g2d.fillOval(x, y, width, height);        }        @Override        public void actionPerformed(ActionEvent e) { oldX = x; oldY = y; if (x + width > getParent().getWidth() || x < 0) {     xVel *= -1; } if (y + height > getParent().getHeight() || y < 0) {     yVel *= -1; } x += xVel; y += yVel; repaint();        }    }}

如果您需要进一步降低速度,然后进一步降低变化量,则意味着您必须改用

double
s,这将导致
Shape
的API支持双精度值

您应该使用哪个?随你(由你决定。Timing
framework确实非常适合在一段时间内进行线性动画处理,您知道要从一种状态进入另一种状态。对于游戏之类的东西来说,状态不是很好,因为对象的状态可能会从我的周期更改为另一个周期。我敢肯定您可以做到,但是使用简单的“主循环”概念会容易得多-
IMHO



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516398.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号