当前位置: 开源爱好者 » 编程教程 » Java教程 » 正文

Java生成 Fireworks 烟花特效

 这是一个以前在诺基亚Java手机中的一个烟花动画效果,在如下示的代码中,烟花效果动画由主线程的函数run()对烟花进行绘制,在函数run()中定义Graphics类的对象,通过程序中的算法来绘制烟花,程序中的关键部分给出了注释,方便大家理解和学习加深,完整代码如下:

java生成烟花

import java
.awt.*;
import java.applet.*;
import java.awt.event.*;
import javax.swing.*;
public class Fireworks extends Applet implements MouseListener,Runnable
{
  int x,y;
  int top,point;
/**
*对小程序进行变量和颜色的初始化。
*/
	public void init()
	{
    x = 0;
    y = 0;
    //设置背景色为黑色
    setBackground(Color.black);
    addMouseListener(this);
	}
	public void paint(Graphics g)
	{
	}
	/**
	*使该程序可以作为应用程序运行。
	*/
	public static void main(String args[]) {
    Fireworks applet = new Fireworks();
    JFrame frame = new JFrame("TextAreaNew");
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e){
        System.exit(0);
      }
    });
    frame.getContentPane().add(
      applet, BorderLayout.CENTER);
    frame.setSize(800,400);
    applet.init();
    applet.start();
    frame.setVisible(true);
  }
/**
*程序主线程,对一个烟花进行绘制。
*/
	public void run()
	{
		//变量初始化
		Graphics g1;
		g1 = getGraphics();
		int y_move,y_click,x_click;
		int v;
		x_click = x;
		y_click = y;
		y_move = 400;
		v = 3;
		int r,g,b;
		while(y_move > y_click)
		{
		  g1.setColor(Color.black);
		  g1.fillOval(x_click,y_move,5,5);
		  y_move -= 5;
		  r = (((int)Math.round(Math.random()*4321))%200)+55;
		  g = (((int)Math.round(Math.random()*4321))%200)+55;
		  b = (((int)Math.round(Math.random()*4321))%200)+55;
		  g1.setColor(new Color(r,g,b));
		  g1.fillOval(x_click,y_move,5,5);
		  for(int j = 0 ;j<=10;j++)
		  {
		    if(r>55) r -= 20;
		  	if(g>55) g -= 20;
		  	if(b>55) b -=20;
		  	g1.setColor(new Color(r,g,b));
		  	g1.fillOval(x_click,y_move+j*5,5,5);
		  }
		  g1.setColor(Color.black);
		  g1.fillOval(x_click,y_move+5*10,5,5);
		  try
		  {
        Thread.currentThread().sleep(v++);
      } catch (InterruptedException e) {}
    }
    for(int j=12;j>=0;j--)
    {
   	 g1.setColor(Color.black);
		 g1.fillOval(x_click,y_move+(j*5),5,5);
		 try
		  {
        Thread.currentThread().sleep((v++)/3);
      } catch (InterruptedException e) {}
		}
		y_move = 400;
		g1.setColor(Color.black);
		while(y_move > y_click)
		{
		  g1.fillOval(x_click-2,y_move,9,5);
		  y_move -= 5;
		}
		v = 15;
		for(int i=0;i<=25;i++)
		{
			r = (((int)Math.round(Math.random()*4321))%200)+55;
		  g = (((int)Math.round(Math.random()*4321))%200)+55;
		  b = (((int)Math.round(Math.random()*4321))%200)+55;
		  g1.setColor(new Color(r,g,b));
			g1.drawOval(x_click-3*i,y_click-3*i,6*i,6*i);
			if(i<23)
			{
				g1.drawOval(x_click-3*(i+1),y_click-3*(i+1),6*(i+1),6*(i+1));
				g1.drawOval(x_click-3*(i+2),y_click-3*(i+2),6*(i+2),6*(i+2));
			}
			try
		  {
        Thread.currentThread().sleep(v++);
      } catch (InterruptedException e) {}
      g1.setColor(Color.black);
			g1.drawOval(x_click-3*i,y_click-3*i,6*i,6*i);
		}
	}
/**
*对鼠标事件进行监听。
*临听其鼠标按下事件。
*当按下鼠标时,产生一个新线程。
*/
	public void mousePressed(MouseEvent e)
  {
  	x = e.getX();
  	y = e.getY();
  	Thread one;
  	one = new Thread(this);
  	one.start();
  	one = null;
   }
  /**
   *实现MouseListener接中的方法。为一个空方法。
  */
  public void mouseReleased(MouseEvent e)
  {
  }
  /**
  *实现MouseListener接中的方法。为一个空方法。
  */
  public void mouseEntered(MouseEvent e)
  {
  }
  /**
   *实现MouseListener接中的方法。为一个空方法。
  */
  public void mouseExited(MouseEvent e)
  {
  }
  /**
   *实现MouseListener接中的方法。为一个空方法。
  */
  public void mouseClicked(MouseEvent e)
  {
  }
}

本烟花制作实例运用了Java界面技术和线程技术。通过界面技术,制作出烟花的形状。通过线程技术,控制烟花的播放场景和播放时间。

CopyRight 2015© 开源爱好者 All Rights Reserved 豫ICP备16030607号 隐私声明 网站地图