Animation 带通用Tween发动机的滑动JPanel
几天来,我一直在尝试创建一个JPanel,它从侧面飞来。我找到了Universal Tween引擎,也看到了一些演示,但由于某种原因,我一直无法在自己的代码中使用它。为了简单起见,让我们尝试将JFrame上的JPanel(包含JLabel中的图像)从(0,0)移动到(600,0)。这是迄今为止我所得到的,也是我有史以来最接近于用这个框架实际移动东西的东西,它所做的一切使JPanel在第一个滴答声左右的时间内跳转到它的目的地。这应该很简单,但我一定错过了什么Animation 带通用Tween发动机的滑动JPanel,animation,frameworks,jpanel,tween,universal,Animation,Frameworks,Jpanel,Tween,Universal,几天来,我一直在尝试创建一个JPanel,它从侧面飞来。我找到了Universal Tween引擎,也看到了一些演示,但由于某种原因,我一直无法在自己的代码中使用它。为了简单起见,让我们尝试将JFrame上的JPanel(包含JLabel中的图像)从(0,0)移动到(600,0)。这是迄今为止我所得到的,也是我有史以来最接近于用这个框架实际移动东西的东西,它所做的一切使JPanel在第一个滴答声左右的时间内跳转到它的目的地。这应该很简单,但我一定错过了什么 SlideTest.java-创建UI
SlideTest.java
-创建UI,初始化线程+Tween
public class SlideTest {
TweeningPane p;
public TweenManager tweenManager;
public static void main(String[] args) {
new SlideTest();
}
public SlideTest() {
try {
setupGUI();
} catch (IOException e) {
e.printStackTrace();
}
tweenManager = new TweenManager();
AnimationThread aniThread = new AnimationThread();
aniThread.setManager(tweenManager);
aniThread.start();
Tween.to(p, 1, 10.0f).target(600).ease(Quad.OUT).start(tweenManager);
}
public void setupGUI() throws IOException {
JFrame f = new JFrame();
f.setSize(800, 600);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p = new TweeningPane();
JLabel l = new JLabel(new ImageIcon("E:/Pictures/Stream/aK6IX4V.png"));
f.setLayout(null);
p.add(l);
p.setBounds(0, 0, 300, 300);
f.add(p);
f.setVisible(true);
}
}
java——这个线程应该尽可能多/经常地更新我的TweenManager
public class AnimationThread extends Thread {
TweenManager tm;
public void setManager(TweenManager tweenmanager) {
this.tm = tweenmanager;
}
public void run() {
while (true) {
//System.out.println("MyThread running");
tm.update(MAX_PRIORITY);
try {
sleep(40);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
java-我的对象(JPanel),我想在JPanel中移动
public class TweeningPane extends JPanel implements TweenAccessor<JPanel> {
private static final long serialVersionUID = 1L;
@Override
public int getValues(JPanel arg0, int arg1, float[] arg2) {
return (int) arg0.getBounds().getX();
}
@Override
public void setValues(JPanel arg0, int arg1, float[] arg2) {
arg0.setBounds((int) arg2[0], 0, 300, 300);
}
}
公共类TweeningPane扩展了JPanel实现TweenAccessor{
私有静态最终长serialVersionUID=1L;
@凌驾
公共int getValues(JPanel arg0、int arg1、float[]arg2){
返回(int)arg0.getBounds().getX();
}
@凌驾
公共void集合值(JPanel arg0、int arg1、float[]arg2){
arg0.setBounds((int)arg2[0],03000);
}
}
我终于明白了。正如我所料,我只是以错误的方式使用了这个框架。我不确定是否需要所有这些步骤,但这是我为了使其工作而经历的:(供将来参考)
我必须注册我的引擎访问者:
Tween.registerAccessor(TweeningPane.class, new TweeningPane());
线本身现在看起来是这样的;我必须将经过的时间作为参数提供给经理的update方法
public void run() {
long ms1 = System.currentTimeMillis();
while (true) {
//System.out.println("MyThread running");
tm.update((System.currentTimeMillis() - ms1) / 1000f);
try {
Thread.sleep(40);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我终于明白了。正如我所料,我只是以错误的方式使用了这个框架。我不确定是否需要所有这些步骤,但这是我为了使其工作而经历的:(供将来参考) 我必须注册我的引擎访问者:
Tween.registerAccessor(TweeningPane.class, new TweeningPane());
线本身现在看起来是这样的;我必须将经过的时间作为参数提供给经理的update方法
public void run() {
long ms1 = System.currentTimeMillis();
while (true) {
//System.out.println("MyThread running");
tm.update((System.currentTimeMillis() - ms1) / 1000f);
try {
Thread.sleep(40);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}