gpt4 book ai didi

java - JPanel 不通过定时器重绘

转载 作者:行者123 更新时间:2023-11-29 05:11:12 25 4
gpt4 key购买 nike

所以我有这个类,这是我的主面板:

public class Frogger extends JPanel {

private static final int WINDOW_WIDTH = 640;
private static final int WINDOW_HEIGHT = 480;

private static final Entity frog;
private static final Entity car;

static {
frog = new Entity("sprites/frog.png", WINDOW_WIDTH / 2 - 75, WINDOW_HEIGHT - 190);
car = new Entity("sprites/car.png", 0, WINDOW_HEIGHT / 2);
}

private static KeyListener genGameListener() {
return new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {}

@Override
public void keyReleased(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT:
frog.move(-50, 0);
System.out.println("lol");
break;
}
}

@Override
public void keyTyped(KeyEvent e) {}
};
}

@Override
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.WHITE);
frog.draw(g2d);
car.draw(g2d);
}

public static void main(String[] args) {
JFrame frame = new JFrame("Frogger!");
Frogger frogger = new Frogger();
frogger.addKeyListener(genGameListener());
frogger.setFocusable(true);
frame.add(frogger);
frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Timer timer = new Timer(100, (ActionEvent e) -> {
car.move(50, WIDTH);
frogger.repaint();
});
}
}

实体类本身:

public class Entity {

private BufferedImage sprite;

private final AffineTransform at;

private final int width;
private final int height;

private int x;
private int y;

public Entity(String imageFileName, int x, int y) {
sprite = null;
try {
this.sprite = ImageIO.read(new File(imageFileName));
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
width = sprite.getWidth();
height = sprite.getHeight();
this.x = x;
this.y = y;
at = new AffineTransform();
at.translate(x, y);
}

public void draw(Graphics2D g) {
g.drawImage(sprite, at, null);
}

public void rotate(int radians) {
at.rotate(radians);
}

public void move(int dx, int dy) {
x += dx;
y += dy;
at.translate(dx, dy);
}
...

但是,我的关键操作没有更新 Sprite ,汽车也没有像计时器计划的那样在屏幕上移动。为什么不重新粉刷框架?

最佳答案

您永远不会在 Timer 对象上调用 start()

关于java - JPanel 不通过定时器重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28401991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com