이 문서에서 구현된 기능은 다음과 같습니다.
1. 음악 재생
2. 유성 수, 비행 속도, 후광 크기, 유성 크기
3. 사용된 지식 포인트는 다음과 같습니다. : :
GUI: java는 form과 Swing을 구현합니다. 실제로 JAVA Swing의 GUI는 더 이상 기업에서 사용되지 않습니다. 주로 일부 학교 및 교육 기관에서 학생들에게 게임과 소규모 프로젝트를 작성하고 기술을 연습하도록 가르치는 데 사용됩니다.
멀티스레딩: CPU가 여러 작업을 동시에 처리하도록 합니다(이 문서에는 음악, 천천히 나타나는 텍스트 및 움직이는 유성선이 포함됩니다).
렌더링:
음악(실제로도 할 수 있습니다.) 음악이 없으면 일부 사람들은 좋아하지 않습니다.):
핵심 코드
import javazoom.jl.decoder.JavaLayerException; import javazoom.jl.player.Player; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; public class MusicThread extends Thread{ @Override public void run() { //播放音乐 System.out.println("开始播放"); //表示音乐文件 File f = new File("nv.mp3"); //第三方jar包 Player类 try { Player p = new Player(new FileInputStream(f));//参数:文件输入流对象 // p.play(); } catch (FileNotFoundException | JavaLayerException e) { e.printStackTrace(); } } }
import javazoom.jl.decoder.JavaLayerException; import javazoom.jl.player.Player; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import java.util.Random; import javax.swing.*; public class MeteorFly extends JFrame { int AppletWidth, AppletHeight; final int MAX = 6; // (~)流星的个数 final int SLEEP = 2; // 流星飞行的速度(数值越大,速度越慢) final int COLORLV = 1; // (~)色阶(可改变光晕大小) final int SIZE = 3 ; // (~)流星大小 private MyPanel panel; public MeteorFly() { panel = new MyPanel(); this.setTitle("LOVE"); this.getContentPane().add(panel); this.setSize(AppletWidth, AppletHeight); // 创建窗体 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args) { new Thread(){ @Override public void run() { //声明一个File对象 File mp3 = new File("nv.mp3"); //创建一个输入流 FileInputStream fileInputStream = null; try { fileInputStream = new FileInputStream(mp3); //创建一个缓冲流 BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream); //创建播放器对象,把文件的缓冲流传入进去 Player player = new Player(fileInputStream); //调用播放方法进行播放 player.play(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (JavaLayerException e) { e.printStackTrace(); } } }.start(); new MeteorFly(); } class MyPanel extends JPanel implements Runnable { Meteor p[]; BufferedImage OffScreen; Graphics drawOffScreen; Thread pThread; Font drawFont = new Font("Arial",0,28); public MyPanel() { //setBackground(Color.black); //窗体初始化 AppletWidth = Toolkit.getDefaultToolkit().getScreenSize().width; AppletHeight = Toolkit.getDefaultToolkit().getScreenSize().height-200; p = new Meteor[MAX]; for (int i = 0; i < MAX; i++) { p[i] = new Meteor(); } OffScreen = new BufferedImage(AppletWidth, AppletHeight, BufferedImage.TYPE_INT_BGR); drawOffScreen = OffScreen.getGraphics(); pThread = new Thread(this); pThread.start(); new Thread(){ @Override public void run() { try { sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } str1 = "流星雨是世间宝藏,而你是我的人间理想"; while(true){ try { sleep(150); } catch (InterruptedException e) { e.printStackTrace(); } pos++; if (pos > str1.length() - 1) { pos = str1.length() - 1; break; } } } }.start(); } int pos = 0; String str1 = " "; @Override public void paintComponent(Graphics g) { super.paintComponents(g); g.drawImage(OffScreen, 0, 0, this); g.setColor(Color.pink); g.setFont(new Font("宋体", Font.BOLD, 50)); g.drawString(str1.substring(0,pos+1),260,700); } @Override public void run() { while (true) { for (int i = 0; i < MAX; i++) { drawOffScreen.setColor(p[i].color); // RGB颜色 drawOffScreen.fillOval(p[i].x, p[i].y, SIZE, SIZE); p[i].x += p[i].mx; p[i].y += p[i].my; int x = p[i].x; int y = p[i].y; int R = p[i].color.getRed(); // 提取颜色 int G = p[i].color.getGreen(); int B = p[i].color.getBlue(); while (true) { if (R ==0 && G ==0 && B ==0 ) { break; } R -= COLORLV; // 尾部颜色淡化 if (R <0 ) { R =0 ; } G -= COLORLV; if (G <0 ) { G =0 ; } B -= COLORLV; if (B < 0) { B =0 ; } Color color = new Color(R, G, B); x -= p[i].mx; // 覆盖尾部 y -= p[i].my; drawOffScreen.setColor(color); drawOffScreen.fillOval(x, y, SIZE, SIZE); } if (x > AppletWidth || y > AppletHeight) { // 流星飞出窗口,重置流星 p[i].reset(); } } repaint(); try { Thread.sleep(SLEEP); } catch (InterruptedException e) { } } } } class Meteor { // 流星类 int x, y; // 流星的位置 int mx, my; // 下落速度 Color color; // 流星颜色 Random r = new Random(); public Meteor() { reset(); } public void reset() { int rand = (int) (Math.random() *100 ); //随机生成流星出现位置 if (rand >35 ) { x = (int) (Math.random() *600 ); y = 0; } else { y = (int) (Math.random() * 150); x =0 ; } mx = r.nextInt(2)+2; //随机生成下落速度和角度 my = 1; color = new Color( // 随机颜色 (new Double(Math.random() *128 )).intValue() +128 , (new Double(Math.random() *128 )).intValue() +128 , (new Double(Math.random() * 128)).intValue() + 128); } } }
여기의 Player 클래스는 자체적으로 가져와야 합니다. 패키지를 다음 링크에 넣습니다.
링크. 추출 코드: v22q
Notes
실제로 열려 있어야 합니다:
패키지를 가져오는 방법:
먼저 복사하여 붙여넣기 패키지를 프로젝트 package
다음에 입력하세요: File –> Project Structure
그런 다음 라이브러리, + 기호, Java
를 클릭하여 가져오려는 파일의 위치를 찾은 다음 계속 확인을 클릭하세요.
위 내용은 낭만적인 유성 고백을 구현하기 위해 Java를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!