我的计时器(scheduleatfixedrate)不循环

nkoocmlb  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(422)

在下面的程序中,我试图反复交换两个图像,以创建步行效果。为了实现这一点,我创建了一个计时器,其中img3的源代码在bob1和bob2之间交替更改。这个很好用。不过,我当然希望动画暂停时,你停止移动。所以我在run方法中加入了if语句。如果我使用一个变量,这也是可行的´我没变。但是如果我使用moveleft变量(如果d被按下则为true,如果d被按下则为false)´t) ,我´t仅在我按下或松开按键时更改图像,而不是在我按住它时更改图像。以下是相关课程。

package pack1;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class KeyHandler implements KeyListener {

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {

        if (e.getKeyCode() == KeyEvent.VK_D) {

            Var.moveleft = true;

        }

    }

    @Override
    public void keyReleased(KeyEvent e) {

        if (e.getKeyCode() == KeyEvent.VK_D) {

            Var.moveleft = false;

        }

    }

}

package pack1;

import java.io.File;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;

import javax.imageio.ImageIO;

public class Animation {

    Timer timer;

    public Animation() {

        timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {

                if (Var.moveleft == true) {

                    if (Var.bobImg == false) {

                        try {

                            Var.img3 = ImageIO.read(new File("rsc/Bob2.png"));

                        } catch (IOException e) {

                            e.printStackTrace();

                        }

                        Var.bobImg = true;

                    } else if (Var.bobImg == true) {

                        try {

                            Var.img3 = ImageIO.read(new File("rsc/Bob1.png"));

                        } catch (IOException e) {

                            e.printStackTrace();

                        }

                        Var.bobImg = false;

                    }

                }

            }

        }, 0, 100);

    }

}
6qfn3psc

6qfn3psc1#

是的,Ided使用一个摆动计时器可以很好地解决这样的问题:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.Timer;

public class Animation {

public Animation() {

        Timer timer;

        timer = new Timer(100, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                        if (Var.bobImg == true) {

                            try {

                                Var.img3 = ImageIO.read(new File("rsc/Bob1.png"));

                            } catch (IOException e1) {

                                e1.printStackTrace();

                            }

                            Var.bobImg = false;

                        } else if (Var.bobImg == false) {

                            try {

                                Var.img3 = ImageIO.read(new File("rsc/Bob2.png"));

                            } catch (IOException e1) {

                                e1.printStackTrace();

                            }

                            Var.bobImg = true;

                        }

                    Var.lbl4.repaint();

            }

        });

    }

}

相关问题