Moving Objects with Random Timers
Your goal is to create moving objects that randomly appear from the screen's bottom, reach a certain height, and then descend. To avoid all shapes starting simultaneously, you need to implement individual timers for each object.
The approach provided below utilizes a Shape class that encapsulates each object's properties, including its random initial delay. Inside the timer's action listener, the Shape methods are called to handle the movement, delay reduction, and drawing.
<code class="java">import java.awt.event.ActionListener; import java.util.List; import java.util.Random; class Shape { // Object properties int x; int y; boolean draw; int randomDelay; // Delay before the object starts moving public Shape(int x, int randomDelay) { this.x = x; this.y = 0; // Start at the bottom of the screen this.draw = false; this.randomDelay = randomDelay; } // Object movement logic public void move() { if (draw) { y++; // Move up or down based on the current state } } // Decrease the delay public void decreaseDelay() { randomDelay--; if (randomDelay <= 0) { draw = true; // Start drawing the object once the delay reaches zero } } // Draw the object public void draw(Graphics g) { if (draw) { // Draw the shape on the screen } } }
This approach ensures that each shape has its own unique random delay, preventing them from starting their movement at the same time.
<code class="java">// Create a list of Shape objects with random delays List<Shape> shapes = new ArrayList<>(); for (int i = 0; i < 10; i++) { Random random = new Random(); int randomXLoc = random.nextInt(width); int randomDelay = random.nextInt(500); // Set a random delay between 0 and 499 milliseconds shapes.add(new Shape(randomXLoc, randomDelay)); } // Initialize a timer and specify the action listener Timer timer = new Timer(10, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for (Shape shape : shapes) { shape.move(); shape.decreaseDelay(); shape.draw(g); // Draw the shape if allowed } } }); // Start the timer timer.start();</code>
The above is the detailed content of How to Create Randomly Moving Objects with Individual Timers in Java?. For more information, please follow other related articles on the PHP Chinese website!