在下面的程序中,我试图反复交换两个图像,以创建步行效果。为了实现这一点,我创建了一个计时器,其中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);
}
}
1条答案
按热度按时间6qfn3psc1#
是的,Ided使用一个摆动计时器可以很好地解决这样的问题: