Java版字符雨效果

4 篇文章 0 订阅

看到很多Matrix中的字符雨,无聊之余也自己写了一个,只是仿照了基本的模样,印象中电影看到的好像是三维效果的= =

要实现这种字符雨效果,实现方法可以有很多,自己一下子就想到的也有三种,现在用其中一种方案来简单地实现。

其实用3DS MAX的粒子系统也可以做出更绚丽的效果= =

 

思路总体分为几点:

一、如何实现一列字符向下滑动的效果?其实就是把字符序列逐个字符地输出在屏幕上,保持x轴不变,随时间改变y轴坐标= =


二、如何展现多列字符向下滑动?其实就是上例的推广,作一个循环来处理不同的列。

为了保证效果,可以先为每列定义一个随机化初始位置,还可以加一个不同的速度和加速度= = 

实现中,我先把屏幕进行了划分,计算出所需要的字符序列行列数,随机生成。

之后就只是从里面取字符,加速度啥的没有去做= =  

当然也可以作一个改变,由自己输入多行不同的字符串之类,可能效果看着更有新鲜感= =


三、如何实现颜色效果?仔细看下Matrix中的字符雨,大概上就是一个从黑到绿的颜色过渡。

实现这种过渡也就是改变RGB值中的G分量大小,很容易= =

下面就开始着手去实现= =

 先附上运行结果的动态截图= =

因为高亮后的代码过长发表失败,所以用了截图,把图片和源文件的压缩包进行了合并。

提醒:把下面的这张图片(所看到的代码其实就是一张图片)保存到电脑上,然后把图片的扩展名改成.rar,

就能把源文件解压出来= =

以后如果高亮后代码没超长,就直接发高亮文本= =

代码写得感觉看起来很不顺眼,发上来时里面有几句多余的也没删除,主要还是理清思路= =

另:我此处开了个Image做双缓冲,我记得是swing默认已经实现了双缓冲,AWT组件没有

我看的书是很多年前的,不知道现在的版本是不是这样,或者有什么更方便的实现双缓冲的办法?

有人知道的话麻烦告知= =


补充:如果需要全屏显示,可以在Test类的构造函数中再加上

        setUndecorated(true);
        setExtendedState(JFrame.MAXIMIZED_BOTH);

这两句来设置无边框和最大化,修改后如下

public class Test extends JFrame {
    private RainCanvas canvas;
    public Test() {
        super("Test");
        setUndecorated(true);
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setVisible(true);
        canvas = new RainCanvas(this.getWidth(), this.getHeight());
        getContentPane().add(canvas);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        Test test = new Test();
        test.canvas.startRain();
    }
}


如果需要修改屏幕上的字符序列个数,可以修改new charset[widht/10][height/10]这里的widht/10的值,

对应的g.drawChars(charset[i], index, 1, i * 10, index * 10);这里的坐标值也要进行修改。

要重新设定Font的大小,直接修改new Font("Arial", Font.BOLD, 15)这处

这些最好是定义成一个字面常量或抽取出方法来进行设置= =

 

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值