java雪花屏保代码 雪花html代码

想实现多个雪花 , 为什么只有一个雪花,怎么实现多线程,另外怎样实现无窗体的动画 ,  就跟q宠物那样的没用Java写过 , 现这种效果最好是用DriectX或者OpenGL里实现,要不,用Java这类托管语言来做的话,所有的东西都是面向对象的,堆和托管堆交互很频繁,还有开N多线程,线程的数量是有限制的 。如果你需要的效果是直接在屏幕上即没有容器的那种,可以直接操作显存试试,这个要用底层语言比如C嵌汇编操作显存的文件映射区域等等,其中雪花飘落的过程用一种计算表达式来实现 , 比如其中有一些速度因子 , 大小因子,轨迹因子,等等(看自己喜好) 。记得以前写过一个DriectX里的粒子运动效果,和雪花飘落的功能很相似,只是它不能直接在桌面上显示,需要容器 。
如何用java写一个屏保程序看看这个试试!
import java.text.*;
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
import java.util.*;
import java.awt.event.*;
/**
*
*
*/
public class ScreenTest extends JPanel implements Runnable{
/** Creates a new instance of ScreenTest */
private String time;
private Rectangle2D rd;
private int x,y,a,b;//座标值和方向值
private int rgb=0;//颜色的值
private Color color;//字体的颜色
private int width,height;//屏幕的大小
public ScreenTest(int width,int height) {
this.width=width;
this.height=height;
initWindow();
}
private void initWindow(){
x=(int)(Math.random()*300);
y=(int)(Math.random()*500);
a=1;
b=1;
this.setBackground(Color.BLACK);
this.setOpaque(true);
rd=new Rectangle2D.Double(10,10,101,10);
color=Color.YELLOW;
}
private void doColor(){
rgb=(int)(Math.random()*0xFFFFFF);
color=new Color(rgb);
}
public void paintComponent(Graphics g){
g.setColor(Color.BLACK);
g.fillRect(0,0,width,height);
g.setColor(color);
g.setFont(new Font("楷书",Font.BOLD,150));
FontMetrics fm=g.getFontMetrics();
rd=fm.getStringBounds(time,g);
g.drawString(time,x,(int)(y+rd.getHeight()));
}
private void doTime(){
Calendar cal=Calendar.getInstance();
DateFormat df=DateFormat.getTimeInstance(DateFormat.MEDIUM);
Date date=cal.getTime();
time=df.format(date);
x+=a;
y+=b;
double width1=rd.getWidth();
double height1=rd.getHeight();
rd.setRect(x,y,width1,height1);
if(rd.intersectsLine(width,0,width,height)){
doColor();
a=-1;
}
else if(rd.intersectsLine(0,0,0,height)){
doColor();
a=1;
}
else if(rd.getY()=-80){
doColor();
b=1;
}
else if(rd.intersectsLine(0,height,width,height)){
doColor();
b=-1;
}
}
public void run(){
while(true){
try{
Thread.sleep(2);
doTime();
repaint();
}
catch(InterruptedException ie){
ie.printStackTrace();
}
}
}
public static void main(String arsg[]){
GraphicsDevice gd=GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
DisplayMode dm=gd.getDisplayMode();
int width=dm.getWidth();
int height=dm.getHeight();
System.out.println("width="+width+"\nheight="+height);
ScreenTest st=new ScreenTest(width,height);
final JFrame jf=new JFrame();
jf.getContentPane().add(st,BorderLayout.CENTER);
jf.setUndecorated(true);
gd.setFullScreenWindow(jf);
new Thread(st).start();
jf.addKeyListener(new KeyAdapter(){
public void keyReleased(KeyEvent ke){
if(ke.getKeyCode()==KeyEvent.VK_NUMPAD0)
System.exit(0);
}

推荐阅读