用Python和Pygame写游戏-从入门到精通(5)
admin
2023-07-31 00:36:49
0

这次开始是真正的游戏编程,以前都是基础的基础啊。

电脑游戏总是倾向于图像化的,尽量的要看得到听得到(现在的技术基本还局限于这两个感官),游戏开发者会花无数的力气在图像上,提升图像效果是游戏开发永恒的话题。这几次主要讲述游戏中的视觉。

像素的威力

凑近显示器,你能看到图像是由一个一个点构成,这就是像素。至于屏幕分辨率的意义,也就不用多说了吧,一个1280×1024的显示器,有着1310720个像素,一般的32为RGB系统,每个像素可以显示16.7百万种颜色(可以看我的另一篇一张白纸可以承载多少重的文章),我们可以写一个小程序来显示这么多的颜色~

12345678910111213141516 import pygamepygame.init() screen = pygame.display.set_mode((640, 480)) all_colors = pygame.Surface((4096,4096), depth=24) for r in xrange(256):    print r+1, \”out of 256\”    x = (r&15)*256    y = (r>>4)*256    for g in xrange(256):        for b in xrange(256):            all_colors.set_at((x+g, y+b), (r, g, b)) pygame.image.save(all_colors, \”allcolors.bmp\”)

 

运行可能有些慢,你应该等生成bmp图像文件,打开看看效果吧(其实就是我刚刚提到的博文里的图片)。

色彩的威力

色彩是一个很有趣的话题,比如把蓝色和黄色混合产生绿色,事实上你可以用红黄蓝混合出所有的颜色(光学三原色),电脑屏幕上的三原色是红绿蓝(RGB),要想更深刻的理解这个东西,你得学习一下(就看看李涛的PhotoShop讲座吧,VeryCD上有下的,讲的还是很清楚的)~

稍有点经验的图像设计者应该看到RGB的数值就能想象出大概的颜色,我们来用一个Python脚本加强这个认识。

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 #!/usr/bin/env pythonimport pygamefrom pygame.locals import *from sys import exit pygame.init() screen = pygame.display.set_mode((640, 480), 0, 32) def create_scales(height):    red_scale_surface = pygame.surface.Surface((640, height))    green_scale_surface = pygame.surface.Surface((640, height))    blue_scale_surface = pygame.surface.Surface((640, height))    for x in range(640):        c = int((x/640.)*255.)        red = (c, 0, 0)        green = (0, c, 0)        blue = (0, 0, c)        line_rect = Rect(x, 0, 1, height)        pygame.draw.rect(red_scale_surface, red, line_rect)        pygame.draw.rect(green_scale_surface, green, line_rect)        pygame.draw.rect(blue_scale_surface, blue, line_rect)    return red_scale_surface, green_scale_surface, blue_scale_surface red_scale, green_scale, blue_scale = create_scales(80) color = [127, 127, 127] while True:     for event in pygame.event.get():        if event.type == QUIT:            ss=\”crayon-st\”>if event.type == QUIT:            >

像素的威力

凑近显示器,你能看到图像是由一个一个点构成,这就是像素。至于屏幕分辨率的意义,也就不用多说了吧,一个1280×1024的显示器,有着1310720个像素,一般的32为RGB系统,每个像素可以显示16.7百万种颜色(可以看我的另一篇一张白纸可以承载多少重的文章),我们可以写一个小程序来显示这么多的颜色~

12345678910111213141516 import pygamepygame.init() screen = pygame.display.set_mode((640, 480)) all_colors = pygame.Surface((4096,4096), depth=24) for r in xrange(256):    print r+1, \”out of 256\”    x = (r&15)*256    y = (r>>4)*256    for g in xrange(256):        for b in xrange(256):            all_colors.set_at((x+g, y+b), (r, g, b)) pygame.image.save(all_colors, \”allcolors.bmp\”)

 

运行可能有些慢,你应该等生成bmp图像文件,打开看看效果吧(其实就是我刚刚提到的博文里的图片)。

色彩的威力

色彩是一个很有趣的话题,比如把蓝色和黄色混合产生绿色,事实上你可以用红黄蓝混合出所有的颜色(光学三原色),电脑屏幕上的三原色是红绿蓝(RGB),要想更深刻的理解这个东西,你得学习一下(就看看李涛的PhotoShop讲座吧,VeryCD上有下的,讲的还是很清楚的)~

稍有点经验的图像设计者应该看到RGB的数值就能想象出大概的颜色,我们来用一个Python脚本加强这个认识。

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 #!/usr/bin/env pythonimport pygamefrom pygame.locals import *from sys import exit pygame.init() screen = pygame.display.set_mode((640, 480), 0, 32) def create_scales(height):    red_scale_surface = pygame.surface.Surface((640, height))    green_scale_surface = pygame.surface.Surface((640, height))    blue_scale_surface = pygame.surface.Surface((640, height))    for x in range(640):        c = int((x/640.)*255.)        red = (c, 0, 0)        green = (0, c, 0)        blue = (0, 0, c)        line_rect = Rect(x, 0, 1, height)        pygame.draw.rect(red_scale_surface, red, line_rect)        pygame.draw.rect(green_scale_surface, green, line_rect)        pygame.draw.rect(blue_scale_surface, blue, line_rect)    return red_scale_surface, green_scale_surface, blue_scale_surface red_scale, green_scale, blue_scale = create_scales(80) color = [127, 127, 127] while True:     for event in pygame.event.get():        if event.type == QUIT:            ata-line=\”crayon-58127dec0f5ec416359859-43\”>4344

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python查找阿姆斯特朗数 题目解释 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...