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);
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage