제공된 코드는 모양이 임의의 지연으로 화면에 나타나도록 어떻게 보장하고 모든 모양이 동시에 나타나는 것을 방지합니까?
움직이는 개체 및 타이머
이 작업의 목표는 특정 움직임 패턴을 따르는 무작위로 나타나는 모양이 있는 화면을 만드는 것입니다. 오르막에 도달했다가 다시 아래로 떨어집니다.
문제
초기 구현에서는 동일한 타이머를 사용하기 때문에 모든 도형이 동시에 나타나는 문제가 발생했습니다. 목표는 각 모양이 무작위 지연으로 나타나도록 하는 것입니다.
무작위 지연을 사용한 솔루션
업데이트된 코드에서:
- A Random Delay for 각 모양: 각 모양은 생성 시 무작위 지연이 할당됩니다.
- 타이머 작업은 모든 모양을 수신합니다. 타이머의 사용자 정의 작업 리스너는 모든 모양을 모니터링합니다.
- Shape 클래스의 이동 논리: Shape 클래스에는 이동 논리(상승 또는 감소 상승)가 포함되어 있습니다.
- 지연 처리: 타이머 작업 리스너는 Shape 메서드를 호출합니다. 지연을 줄이기 위해 지연이 0에 도달하면 모양이 보이고 움직이기 시작합니다.
- 색상 변화: 시각적 매력을 위해 모양에 다양한 색상을 부여했습니다.
개선된 코드
동시 출현 문제를 해결하는 개선된 코드는 다음과 같습니다.
<code class="java">import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.Timer; public class RandomShape extends JPanel { private static final int D_HEIGHT = 500; private static final int D_WIDTH = 400; private static final int INCREMENT = 8; private List<Shape> shapes; private List<Color> colors; private Timer timer = null; public RandomShape() { colors = createColorList(); shapes = createShapeList(); timer = new Timer(30, new ActionListener() { public void actionPerformed(ActionEvent e) { for (Shape shape : shapes) { shape.move(); shape.decreaseDelay(); repaint(); } } }); JButton start = new JButton("Start"); start.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { timer.start(); } }); JButton reset = new JButton("Reset"); reset.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { shapes = createShapeList(); timer.restart(); } }); JPanel panel = new JPanel(); panel.add(start); panel.add(reset); setLayout(new BorderLayout()); add(panel, BorderLayout.PAGE_START); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); for (Shape shape : shapes) { shape.drawShape(g); } } @Override public Dimension getPreferredSize() { return new Dimension(D_WIDTH, D_HEIGHT); } private List<Color> createColorList() { List<Color> list = new ArrayList<>(); list.add(Color.BLUE); list.add(Color.GREEN); list.add(Color.ORANGE); list.add(Color.MAGENTA); list.add(Color.CYAN); list.add(Color.PINK); return list; } private List<Shape> createShapeList() { List<Shape> list = new ArrayList<>(); Random random = new Random(); for (int i = 0; i < 20; i++) { int randXLoc = random.nextInt(D_WIDTH); int randomDelayedStart = random.nextInt(100); int colorIndex = random.nextInt(colors.size()); Color color = colors.get(colorIndex); list.add(new Shape(randXLoc, randomDelayedStart, color)); } return list; } class Shape { int randXLoc; int y = D_HEIGHT; int randomDelayedStart; boolean draw = false; boolean down = false; Color color; public Shape(int randXLoc, int randomDelayedStart, Color color) { this.randXLoc = randXLoc; this.randomDelayedStart = randomDelayedStart; this.color = color; } public void drawShape(Graphics g) { if (draw) { g.setColor(color); g.fillOval(randXLoc, y, 30, 30); } } public void move() { if (draw) { if (y <= 50) { down = true; } if (down) { y += INCREMENT; } else { y -= INCREMENT; } } } public void decreaseDelay() { if (randomDelayedStart <= 0) { draw = true; } else { randomDelayedStart -= 1; } } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JFrame frame = new JFrame(); frame.add(new RandomShape()); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } }</code>
이 향상된 코드는 각 모양에 무작위 지연을 할당하고 타이머가 관리하도록 하여 문제를 해결합니다. 모든 모양. 각 모양의 움직임은 내부적으로 처리되며 타이머는 모양이 보이고 움직이기 시작할 때까지 지연 시간을 줄입니다.
위 내용은 제공된 코드는 모양이 임의의 지연으로 화면에 나타나도록 어떻게 보장하고 모든 모양이 동시에 나타나는 것을 방지합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











2025 년 상위 4 개의 JavaScript 프레임 워크 : React, Angular, Vue, Svelte

카페인 또는 구아바 캐시와 같은 라이브러리를 사용하여 자바 애플리케이션에서 다단계 캐싱을 구현하려면 어떻게해야합니까?

Java의 클래스로드 메커니즘은 다른 클래스 로더 및 대표 모델을 포함하여 어떻게 작동합니까?

Spring Boot Snakeyaml 2.0 CVE-2022-1471 문제 고정

캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA (Java Persistence API)를 어떻게 사용하려면 어떻게해야합니까?

고급 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 또는 Gradle을 어떻게 사용합니까?
