Java Moving an object around the screen

I am trying to move a train through a java window and am having serious problems. I have a Train class in which I made a train, and a driver class that should move a train. I need the whole train to move from right to left until it “skips” the left edge of the screen. Then add an if statement to change dx so that the train resumes on the right side. Below I tried, but it does not work. Can anyone help me?

public class Driver extends GraphicsProgram
{
    //~ Instance/static variables .............................................

    private static final int N_STEPS = 1000;
    private static final int PAUSE_TIME = 20;
    private static final double TRAIN_LENGTH = 320;

    //~ Constructor ...........................................................

    // ----------------------------------------------------------
    /**
     * The run() method of the Driver Class.
     * Creates an instance of the Train Class.
     * Responsible for animating the train across the screen.
     */
    public void run()
    {
        Train train = new Train(getGCanvas());
        for (int i = 0; i < N_STEPS; i++) {
            train.move(-100, 0);
            pause(PAUSE_TIME);
    }
+4
source share
1 answer

Here is a small demo with a swing. Just replace the black rectangle with the image of your train, and you're done.

( ) ( game loop). , , .

import javax.swing.*;
import java.awt.*;

public class TrainDemo {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Train Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800, 400);
        frame.setLocationRelativeTo(null);
        frame.add(new TrainCanvas());
        frame.setVisible(true);
    }

}

class TrainCanvas extends JComponent {

    private int lastX = 0;

    public TrainCanvas() {
        Thread animationThread = new Thread(new Runnable() {
            public void run() {
                while (true) {
                    repaint();
                    try {Thread.sleep(10);} catch (Exception ex) {}
                }
            }
        });

        animationThread.start();
    }

    public void paintComponent(Graphics g) {
        Graphics2D gg = (Graphics2D) g;

        int w = getWidth();
        int h = getHeight();

        int trainW = 100;
        int trainH = 10;
        int trainSpeed = 3;

        int x = lastX + trainSpeed;

        if (x > w + trainW) {
            x = -trainW;
        }

        gg.setColor(Color.BLACK);
        gg.fillRect(x, h/2 + trainH, trainW, trainH);

        lastX = x;
    }

}
+3

All Articles