文件包:
./SaverX_Y.bat 和SuperSaver.bat 为启动屏保的批处理文件,X代表X号屏保,Y代表模式(拖影/无拖影)。双击执行。
./src/ 为源代码,因为很不幸的IDE不支持中文(偶穷,装不起Eclipse),注释都用英文写了;
./classes/ 为编译后的class文件,用1.4.2开了Optimization参数编译的;
./licence.txt 为 GNU GPL 许可,遵不遵守随你吧;
启动类:
启动类MyScreenSaver的启动参数
-enabledragging 启动拖影,用帧数下降换华丽效果,默认关;
-addperiod=X X为添加新精灵的周期,毫秒;
-spriteclass=X,Y,Z X/Y/Z为此层使用精灵类的类名,用半角逗号分割开。比如-spriteclass=DefaultSprite,BouncerSprite就是绘制两层精灵,下层为DefaultSprite层,上层为BouncerSprite层。
类结构
MyScreenSaver:启动类,就一个main,处理启动参数;
SaverCanvas:使用双缓冲渲染至屏幕,同时也作为所有精灵层的容器;
Sprite及子类:拥有简单生命周期的屏幕精灵,见下文;
SpriteGroup:由一组精灵构成一层,SpriteGroup使用LinkedList管理一层精灵。注意,一层只能有一种精灵。另外兼具自动添加/复用本层精灵功能;
Helper:没什么用,一个随机数生成器+内/显存Surface分配器;
MyScreenSaverFrame:包括初始化图形环境,初始化SpriteGroup和安排层次结构,处理AWT事件等等及其余杂项;
做自己的屏保
整个程序建立在图层-精灵结构上。‘精灵’可以认为是一种各自行动不受组中其它精灵互不影响的实体,通过它们根据既定简单规则产生的随机活动产生出整体美感(不信的话跑跑Saver1_A.bat)。要做自己的屏保,只要在默认包中继承Sprite抽象类,然后实现若干方法:
void init (Component c):初始化精灵的各种状态,必要;
booelan isValid ():询问精灵有效期,如果无效则图层会移除此精灵。对于不飞出屏幕的精灵,可以考虑永远返回true,可选;
void animate ():移动或产生各种动态效果(缩放,变色等等),一种精灵效果的好坏就指望这个和下面的render方法,必要;
void render (Graphics2D):用指定的绘图环境渲染这个精灵。把它当作一个小的paint ()或paintComponent ()来用吧,必要。
int getRaius ():返回精灵的大小,单位是像素,必要;
其中,一个Sprite的生命周期为:
1,调用init方法初始化;
2,调用isValid
3,调用animate
4,调用render渲染;
5,goto 2;
注意,由于单个图层采用固定最大数目和精灵复用机制。一个精灵可能在未过期(t<lifespan)的情况下被调用init方法重新初始化,进入新的生命周期。
具体实现可以参考现有的4个实现:DefaultSprite (固定位置随机出现方块,存货随机时间后消失),RectSprite(气泡螺旋上升),WispSprite(同RectSprite),BouncerSprite(方块沿直线螺旋前进,遇墙弹回)。
写完自定义精灵类之后把这个类的名字写在启动参数-spriteclass=里即可。
注意,源代码请用1.4版编译,用1.5以上编译时加上 -source 1.4 参数
目前不能用windows屏保管理器启动,不过听说Java打包exe和exe转scr的软件到处都有,配合起来使用应该可以整出scr文件。
没了
(C) GZYZ 2007 All Right Reserved
gzyzgzyz@hotmail.com