看了几篇实现特效的帖子,都是大同小异,不知道出处是哪里了都,我的实现方法和他们稍有不同,同样是用pygame。一看之下才发现,原来这种技术论坛搬砖的也这么多。
先上代码,再逐行解释,刚学pygame,不足之处,亲各位朋友多多指教吧。

'''实现黑客帝国代码雨特效屏保,本来先分成三个函数来写,但是不好讲解,只好都拼成一个了,将就看吧'''
#这个列表是我们要展示的字符,有数字10,0-9数字,所有英文字符三种,可以通过方向键切换
texts=['10'*10,''.join(str(i) for i  in range(10)),string.ascii_letters]    def main():#游戏循环主函数pygame.init()#初始化pygame,必备width,height = max(pygame.display.list_modes())#算出屏幕最大的分辨率,由于要制作屏保必须全屏,所以要列出显示器的最大分辨率screen=pygame.display.set_mode((width,height),FULLSCREEN,32)#全屏显示,创建screen对象,参数为全屏pygame.display.set_caption('黑客帝国')#全屏之后没有标题栏,这句仅供学习my_font=pygame.font.SysFont("arial", 20)#引入字体对象font_height= my_font.get_linesize()#或者用my_font.get_height()返回字体高度,为了使显示的字符不重叠,我们需要获得字符的高度。columnspan=20#代码流初始间距,可自由调整text_index=0#选择显示的初始在列表的下标timedely=30#延迟时间,代码流的流动速度# time_f = pygame.time.Clock()仅供学习时钟对象while True:#游戏主循环screen.fill((0,0,0))#填充屏幕黑色rgb颜色,此处其他帖子都是再添加一个半透明的screen对象,实现字符流渐变效果for event in pygame.event.get():#监控鼠标动作事件if event.type == QUIT:#如果点击标题栏关闭按钮触发该事件pygame.quit()#退出pygamesys.exit()#退出解释器elif event.type == pygame.KEYDOWN:#键盘按下事件if event.key == pygame.K_q:#按下键为q则退出游戏,由于使全屏没有标题栏所以需要快捷键退出pygame.quit()sys.exit()elif event.key == pygame.K_LEFT:text_index +=1#单击方向左键更换字符流if text_index == len(texts):text_index=0elif event.key == pygame.K_RIGHT:columnspan += 10#右键增加字符流之间的间距if columnspan > width/4:columnspan = 20elif event.key == pygame.K_DOWN:timedely += 10#方向下键,减慢流动速度if timedely >200:timedely=30# time_f.tick(130)pygame.time.delay(timedely)#延迟时间for x in range(0,width,columnspan):#字符的x左边循环y=random.randrange(font_height,height)#y坐标在字符高度和屏幕高度之间随机选择for s in texts[text_index]:#这里使不同的地方,通过随机选择字符的前景色,实现渐变的效果,绿色从0-255随机选择font_screen=my_font.render(s,1,(0,random.randrange(0,255),0),(0,0,0))#显示出字符screen.blit(font_screen,(x,y))#每一个字符y坐标递减一个字符高度y -= font_heightif y<0:#如果y小于0了,则初始成屏幕高度y=heightpygame.display.update()#刷新游戏界面if __name__ == "__main__":main()

图我就不截图了,大家可以复制下来自己运行看看。由于pygame的中文教程非常少,我就找到过一本,大部分是英文资料,我这种四级都没过的,啃起来挺困难,幸亏有百度翻译。
顺便提供一些pygame的常用api

'''
*******************窗口模式FULLSCREEN       Creates a display that fills the entire screen.DOUBLEBUF        Creates a “double-buffered” display. Recommended for HWSURFACE or OPENGL.HWSURFACE        Creates a hardware-accelerated display (must be combined with theFULLSCREEN flag).OPENGL           Creates an OpenGL renderable display.RESIZABLE        Creates a resizable display.NOFRAME          Removes the border and title bar from the display.*******************颜色位深8 bits          256 colors, chosen from a larger palette of colors15 bits         32,768 colors, with a spare bit16 bits         65,536 colors24 bits         16.7 million colors32 bits         16.7 million colors, with a spare 8 bits********************事件QUIT            User has clicked the close button.          noneACTIVEEVENT     Pygame has been activated or hidden.        gain, stateKEYDOWN         Key has been pressed.                       unicode, key, modKEYUP           Key has been released.                      key, modMOUSEMOTION     Mouse has been moved.                       pos, rel, buttonsMOUSEBUTTONDOWN Mouse button was pressed.                   pos, buttonMOUSEBUTTONUP   Mouse button was released.                  pos, buttonJOYAXISMOTION   Joystick or pad was moved.                  joy, axis, valueJOYBALLMOTION   Joy ball was moved.                         joy, ball, relJOYHATMOTION    Joystick hat was moved.                     joy, hat, valueJOYBUTTONDOWN   Joystick or pad button was pressed.         joy, buttonJOYBUTTONUP     Joystick or pad button was released.        joy, buttonVIDEORESIZE     Pygame window was resized.                  size, w, hVIDEOEXPOSE     Part or all of the Pygame window was exposed.   noneUSEREVENT       A user event has occurred.                      code
'''
'''
#pygame.event.set_blocked(MOUSEMOTION)阻止事件可传入事件名或者事件名列表
#pygame.event.set_blocked([KEYDOWN, KEYUP])
#pygame.event.set_blocked(None)传入None可解除所有阻止事件
#pygame.event.set_allowed()允许事件,用法同上#my_font = pygame.font.SysFont("arial", 16)实用系统字体,如果查找不到将实用系统默认字体
#my_font = pygame.font.Font("my_font.ttf", 16)#通过文件创建字体
#text_surface = my_font.render("Pygame is cool!", True, (0,0,0), (255, 255, 255))#用于把文字表面对象。参数说明:输入文字,抗锯齿,前景色,背景色
#pygame.image.save(name_surface, "name.png")文字保存成图片
#blank_surface = pygame.Surface((256, 256))#创建表面对象
#blank_alpha_surface = pygame.Surface((256, 256), flags=SRCALPHA, depth=32)
#my_rect3 = Rect(100, 100, 200, 150)
#my_rect4 = Rect((100, 100), (200, 150))#创建矩形对象# screen.set_clip(0, 0, 640, 300)#裁剪分割屏幕对象,分区显示
# draw_map()
# screen.set_clip(0, 300, 640, 180)
# draw_panel()
# my_font_image = Pygame.load("font.png")
# letters = []
# letters["a"] = my_font_image.subsurface((0,0), (80,80))#设置子表面
# letters["b"] = my_font_image.subsurface((80,0), (80,80))
#screen.fill((0, 0, 0))屏幕填充颜色,也可接受矩形对象pygame.key.get_focused()如果程序获得焦点返回True,如果没有返回False
pygame.key.get_pressed()返回所有键的布尔值列表,如果键被按下则相应的键值变为1
pygame.key.get_mods()检查是否按下了修饰键,如需要检查左侧shift键是否按下:pygame.key.get_mods() & KMOD_LSHIFT
pygame.key.set_mods()设置键组合pygame.key.set_mods(KMOD_SHIFT | KMOD_ALT)
pygame.key.set_repeat()设置重复按键,当一直按下某键多久开始重复,参数一为初始延迟值毫秒,和间隔延迟值,如果无参数调用则禁用重复
pygame.key.name()通过键码位返回键的名字配合pygame.key.get_pressed()使用,参数为该函数各个值下标也就是码位pygame.mouse.get_pressed()返回左中右三个鼠标键是否被按下的布尔值元组
pygame.mouse.get_rel()以元组的形式返回鼠标的相对移动距离
pygame.mouse.get_pos()以元组形式返回鼠标当前坐标
pygame.mouse.set_pos()设置鼠标坐标位置
pygame.mouse.set_visible()更改标准鼠标光标的可见性。如果False,光标将不可见
pygame.mouse.get_focused()如果pygame窗口正接收鼠标活着窗口位于顶部返回True
pygame.mouse.set_cursor()设置标准光标图像。这是很少需要的,因为通过将图像blitting到鼠标坐标可以获得更好的结果。
pygame.mouse.get_cursor()获取标准光标图像
'''

希望以上的内容对你有所帮助,如果也想啃啃英文可以加我QQ109054964,共同学习进步。

实现类似黑客帝国的字符流特效屏保相关推荐

  1. 妲己智能机器人开箱_王者荣耀:妲己第二款史诗限定皮肤周三上架,全局数字流特效一览...

    继三款鼠年限定皮肤上线后,第二波新皮肤也即将登陆峡谷,而首款皮肤便是妲己的时之彼端,妲己皮肤将在29号(正月初五)零点正式上架,首周710(兑换点券卡后可以减50点券),那么这款史诗限定皮肤的原画模型 ...

  2. java 字符流与字节流区别_JAVA 字符流与字节流的区别

    Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 U ...

  3. Java IO: 字符流的Buffered和Filter

    作者: Jakob Jenkov  译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍缓冲与过滤相关的reader和writer,主要涉及BufferedReader.B ...

  4. java byte char io流_吃透Java IO:字节流、字符流、缓冲流

    前言有人曾问fastjson的作者(阿里技术专家高铁):"你开发fastjson,没得到什么好处,反而挨了骂背了锅,这种事情你为什么要做呢?" 高铁答道:"因为热爱本身, ...

  5. 面试避坑手册之 Java字节流和字符流总结IO流!

    从接收输入值说起 在日常的开发应用中,有时候需要直接接收外部设备如键盘等的输入值,而对于这种数据的接收方式,我们一般有三种方法:字节流读取,字符流读取,Scanner 工具类读取. 字节流读取 直接看 ...

  6. Java IO: 字符流的Piped和CharArray

    转载自   Java IO: 字符流的Piped和CharArray 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍管道与字符数组相 ...

  7. Java IO: 其他字符流(下)

    转载自   Java IO: 其他字符流(下) 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackRe ...

  8. 【转】文本文件和二进制文件区别及java中字节流和字符流归纳

    首先在物理上文本文件和二进制文件并没有区别,都是以二进制01的形式存放于存储介质中,他们的区别只是逻辑上的区别,这两种方式只是在编码层次上有差别.文本文件是基于字符编码的文件,常见的编码有ASCII编 ...

  9. 复习Java字节流_字符流使用及案例

    字节流_字符流 主要内容 IO流 字节流 字符流 异常处理 Properties 第一章 IO概述 1.1 什么是IO 生活中,你肯定经历过这样的场景.当你编辑一个文本文件,忘记了ctrl+s ,可能 ...

  10. java字符的输入流_Java:字节流和字符流(输入流和输出流)

    InputStream是抽象基类,所以它不可以创建对象,但它可以用来"接口化编程",因为大部分子类的函数基类都有定义,所以利用基类来调用函数. FileInputStream是用来 ...

最新文章

  1. Hadoop2.7.3分布式集群安装
  2. 我和学员那些事儿——涅槃重生的背后
  3. Java反射原理学习之MethodHandle debug
  4. JAXB和XStream比较
  5. URLDecoder: Illegal hex characters in escape (%) pattern ...
  6. 侍魂服务器维修,侍魂胧月传说合服活动开启 4月15日更新内容预告
  7. iOS 开发中,单款应用程序的最大可用内存是多少?
  8. sde java_arcgis SDE for Java
  9. linux连接FreeBSD虚拟机的mysql
  10. 华为手机改定位怎么改变_华为推送HMS服务,依靠鸿蒙OS,或将改变手机行业格局...
  11. 12个写论文必备的神经网络可视化工具
  12. Sass:@error
  13. [原创]K8_Delphi源码免杀系列教程
  14. 微信小程序页面倒计时
  15. C语言实现通讯录(动态版)
  16. 【笔试面试】HR面的面试技巧
  17. Truffle在ganache-cli部署合约
  18. js layui跳转页面_layui lay-href不能成功跳转页面
  19. 极客手中的利器Electron
  20. ccf--20150303--节日

热门文章

  1. java游戏开发入门教程_JAVA制作游戏入门教程
  2. GB2312、GBK汉字字库偏移地址的计算
  3. html怎么用excel打开乱码,excel打开是乱码,详细教您excel打开是乱码怎么解决
  4. visio插入箭头_visio流程图中画箭头
  5. 使用Perl5获取有道词典释义
  6. mplayer+科大讯飞离线语音包
  7. c语言程序设计5pdf,C语言程序设计5.pdf
  8. 在MT4上使用KDJ指标
  9. 易语言计算机代码,易语言基础教程之简单代码的编写
  10. 素数问题c语言程序,判断素数问题(C语言实现)