Wie kann ich mehrere Objekte gleichzeitig scrollen?
Nach dieser wurde eine neue Frage gestellt, gefundenHier.
Ich bin neu in Java, arbeite aber an einer Neuauflage von "Flappy Bird", um mehr über Java und die Art und Weise, wie Grafiken angezeigt werden, zu erfahren. Alle mögliche Lösungen oder Vorschläge zu irgendwelchen meiner Fragen werden sehr geschätzt. Vielen Dank!
Im Moment erzeugt mein Programm eine zufällige Pipe und scrollt sie, aber ich brauche sie nicht, um weiter zu scrollen, wennx1-3 = -83
(In diesem Fall wird die Leitung vollständig vom Bildschirm entfernt und nicht mehr benötigt).
Fragen
Wie kann ich meine machen?Game.class
scrollen Sie mehr als eine Instanz vonPipes.class
beim Hinzufügen eines voreingestellten Abstands zwischen ihnen? Ich konnte den Abstand zwischen ihnen herausfinden, aber ich bin mir nicht sicher, wie ich das machen soll. Es müssen maximal 3 Pfeifen gleichzeitig angezeigt werden.
Wie kann ich ein Panel für das Hauptmenü anzeigen und dann nach Drücken einer Starttaste zum Pipe-Panel wechseln?
Klassen
Game.java
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class Game {
Pipes panel = new Pipes();
public Game() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(panel);
f.setTitle("Pipe Game");
f.setResizable(false);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
Timer timer = new Timer(10, new ActionListener() { //pipe speed
@Override
public void actionPerformed(ActionEvent e) {
panel.move();
}
});
timer.start();
Timer refresh = new Timer(30, new ActionListener() { //refresh rate
@Override
public void actionPerformed(ActionEvent e) {
panel.repaint();
}
});
refresh.start();
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Game();
}
});
}
}
Pipes.java
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Pipes extends JPanel {
//Declare and initialiaze variables
int x1 = 754; //xVal start
int x2 = 75; //pipe width
//total width is 83
int y1 = -1; //yVal start
int y2 = setHeightVal(); //pipe height
int gap = 130; //gap height
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.clearRect(0,0,750,500); //Clear screen
g.drawRect(x1,y1,x2,y2); //Draw part 1
g.drawRect(x1-3,y2-1,x2+6,25); //Draw part 2
g.drawRect(x1-3,y2+25+gap,x2+6,25); //Draw part 3
g.drawRect(x1,y2+25+gap+25,x2,500-y2-49-gap); //Draw part 4
}
public void move() {
x1--;
}
public int getMyX() { //To determine where the pipe is horizontally
return x1-3;
}
public int getMyY() { //To determine where the pipe is vertically
return y2+25;
}
public int setHeightVal() { //Get a random number and select a preset height
int num = (int)(9*Math.random() + 1);
int val = 0;
if (num == 9)
{
val = 295;
}
else if (num == 8)
{
val = 246;
}
else if (num == 7)
{
val = 216;
}
else if (num == 6)
{
val = 185;
}
else if (num == 5)
{
val = 156;
}
else if (num == 4)
{
val = 125;
}
else if (num == 3)
{
val = 96;
}
else if (num == 2)
{
val = 66;
}
else
{
val = 25;
}
return val;
}
@Override
public Dimension getPreferredSize() {
return new Dimension(751, 501);
}
}