import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Main extends JFrame {
private static final int W = 800;
private static final int H = 400;
private int last = -1;
public Main() {
super("JFrame");
this.add(new ImagePanel());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
setSize(W, H);
this.setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Main();
}
});
}
class ImagePanel extends JPanel {
Timer movementTimer;
int x, y;
public ImagePanel() {
x = 58;
y = 58;
movementTimer = new Timer(12, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
moveImage();
repaint();
}
});
movementTimer.start();
}
public void moveImage() {
if (last < 0) {
last = random();
x += last;
y += last;
} else {
x -= last;
y -= last;
last = -1;
}
if (x > W) {
x = 0;
}
if (y > H) {
y = 0;
}
}
private int random() {
Random r = new Random();
int Low = 2;
int High = 14;
int Result = r.nextInt(High - Low) + Low;
return Result;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
long start = System.nanoTime();
g.setColor(Color.RED);
g.fillRect(0, 0, W, H);
g.setColor(Color.BLUE);
g.fillRect(x, y, 50, 50);
}
}
}
结果一点都不顺利,你有什么建议吗?
简短的回答是肯定的,这是可以做到的。长期的答案是,您永远不会找到一个单一的例子/解决方案来满足您的确切需求,您将需要剖析它们并删除那些您需要的元素。这是一个专业开发人员的标志,相信我,我90%的时间都在做我以前从未做过的事情(或者对如何完成没有初步想法)。
当提出一个问题/想法时,您需要后退一步,将其分解为可管理的组件
从我的角度来看,你有两个基本要求,动画和转换。
另一个解决方案是使用一个线程,计算每个更新周期所需的时间,并等待维护FPS所需的剩余时间。当您遇到线程问题(脏更新)时,这将变得更加复杂,而且它没有考虑在UI上实际呈现图形可能需要的时间(当使用Swing的被动呈现引擎时)
转换图形(移动/旋转)最终将归结为您正在转换的“什么”。
graphics2d
API具有旋转图像的能力,例如,example,example,example,example,example,example,example。
它还可以旋转图形
上下文本身,这可能是混乱的,或者旋转“形状”,这通常更容易管理。
你应该看看如何处理几何和转换形状、文本和图像以及一般的2D图形。
您还可以在点之间移动对象并改变它们的排列,如这里和这里所演示的,或者您可以使用基于路径的动画,以便对象遵循预定义的移动路径,或者更复杂的东西,如基于时间线的动画,例如,示例,示例
本文向大家介绍iOS 水波纹动画的实现效果,包括了iOS 水波纹动画的实现效果的使用技巧和注意事项,需要的朋友参考一下 本人最近在研究iOS动画,至于原理,我不在这里说了。毕竟这里的标题:水波纹的实现。 在这里,要学习水波纹的实现,首先要知道以下几点知识: 1.正弦函数:y = Asin(wx +b) + c。相信大家都比较熟悉。 2.CAShapeLayer的简单实用,相信看一下,就是知道其大概
本文向大家介绍Android WaveView实现水流波动效果,包括了Android WaveView实现水流波动效果的使用技巧和注意事项,需要的朋友参考一下 水流波动的波形都是三角波,曲线是正余弦曲线,但是Android中没有提供绘制正余弦曲线的API,好在Path类有个绘制贝塞尔曲线的方法quadTo,绘制出来的是2阶的贝塞尔曲线,要想实现波动效果,只能用它来绘制Path曲线。待会儿再讲
本文向大家介绍Unity shader实现顶点动画波动效果,包括了Unity shader实现顶点动画波动效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Unity shader实现顶点动画的具体代码,供大家参考,具体内容如下 需要了解的背景知识: 波动实例:y= Asin(ωx+φ) φ:决定波形与X轴位置关系或横向移动距离(左加右减) ω:决定周期(最小正周期T=2Π/|ω
本文向大家介绍iOS实现波浪效果,包括了iOS实现波浪效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了iOS实现波浪效果的具体代码,供大家参考,具体内容如下 代码: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍Android实现水波纹效果,包括了Android实现水波纹效果的使用技巧和注意事项,需要的朋友参考一下 一、效果 点击开始: 点击停止: 二、在MainActivity中 三、在activity_main中 四、在WaveView中: 五、在CircleImageView中: 六、在attrs中 以上所述是小编给大家介绍的Android实现水波纹效果,希望对大家有所帮助,如
本文向大家介绍Android实现水波纹特效,包括了Android实现水波纹特效的使用技巧和注意事项,需要的朋友参考一下 最近需要做个类似于水波纹动画的效果,思考了一下不需要UI切个动态图,Android原生的技术利用动画或者自定义控件都可以实现,下面上个图类似于这样的效果 下面请看第一种动画实现,这种方式较为简单些,就是利用3个ImageView不断地做缩放和渐变的动画。 布局文件定义一下 接下来