基本上我正在制作TRON,我的第一步是做一个基本的蛇游戏,我的第一步是在屏幕上做一个方形移动,然后实现关键的听众。我希望看到广场在每个舞台阶段向下移动,但我似乎只是得到最终的油漆图像,所以我认为它确实移动,我只是看不到框架正在更新,任何人都可以帮忙吗?
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.*;
public class Multiplayer extends JPanel { //implements ActionListener {
public static Multiplayer multiplayer;
public static ArrayList<Point> bikeParts = new ArrayList<>();
public static final int UP = 0, DOWN = 1, LEFT = 2, RIGHT = 3, SCALE = 10;
public static int ticks = 0, direction = DOWN;
public static Point bike;
public boolean over = false;
public JFrame frame;
public renderPanel rp;
public Multiplayer() {
frame = new JFrame();
//JPanel panel = new JPanel();
rp = new renderPanel();
//add(panel, BorderLayout.CENTER);
frame.getContentPane().add(rp, BorderLayout.CENTER);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(900, 700);
frame.setVisible(true);
frame.setResizable(false);
bike = new Point(0, 0);
for (int i = 0; i < 1000; i++) {
animate(null);
rp.repaint();
}
}
//@Override
public void animate(ActionEvent ef) {
rp.repaint();
ticks++;
System.out.println("yw");
if (ticks % 10 == 0 && bike != null && over != true) {
System.out.println("did");
rp.repaint();
bikeParts.add(new Point(bike.x, bike.y));
if (direction == UP) {
if (bike.y - 1 > 0) {
bike = new Point(bike.x, bike.y - 1);
} else {
over = true;
}
}
if (direction == DOWN) {
if (bike.y + 1 < 700) {
bike = new Point(bike.x, bike.y + 1);
} else {
over = true;
}
}
if (direction == LEFT) {
if (bike.x - 1 > 0) {
bike = new Point(bike.x - 1, bike.y);
} else {
over = true;
}
bike = bikeParts.get(bikeParts.size() - 1);
bikeParts.remove(0);
}
if (direction == RIGHT) {
if (bike.x + 1 < 900) {
bike = new Point(bike.x + 1, bike.y);
} else {
over = true;
}
}
}
}
}
然后:
import javax.swing.*;
import java.awt.*;
public class renderPanel extends JComponent {
@Override
public void paintComponent(Graphics g) {
// super.paintComponent(g);
System.out.println("painting");
Multiplayer mp = Multiplayer.multiplayer;
g.setColor(Color.black);
g.drawRect(0, 0, 900, 700);
g.fillRect(0, 0, 900, 700); //arena
g.setColor(Color.WHITE);
for (Point point : mp.bikeParts) {
g.fillRect(point.x * Multiplayer.SCALE, point.y * Multiplayer.SCALE, Multiplayer.SCALE, Multiplayer.SCALE);
}
g.fillRect(mp.bike.x * Multiplayer.SCALE, mp.bike.y * Multiplayer.SCALE, Multiplayer.SCALE, Multiplayer.SCALE);
}
}