用pygame做游戏脚本,pygame.image.saveload()方法打不开图片,像素已经按照要求设置好了,麻烦大神看下

> Python小游戏学习制作《兔子和獾》挺早网上看到了12岁的少年写的博客,使用pygame写简单的
Python小游戏学习制作《兔子和獾》挺早网上看到了12岁的少年写的博客,使用pygame写简单的
发布时间: & &
浏览:1 & &
回复:0 & &
悬赏:0.0希赛币
Python小游戏学习制作《兔子和獾》
  挺早网上看到了12岁的少年写的博客,使用pygame写简单的小游戏,不能随便说人家是天才,但是至少12岁都开始写了说明很聪明勤奋。
  博客原文:
  中文有翻译版:
  人家都写了怎么做,我想记录下简单的流程和我在写的过程中遇到的一些问题以及需要注意的几点:
  一、简单过程
  1、***python
  2、***pygame这个包
  3、功能是在框架上逐渐搭建起来的,不要着急。
  按照“框架主体-&搭建窗口-&加载画面元素-&让元素兔子动起来(上下左右以及旋转)-&让兔子可以有武器发射-&随机位置间隔一定时间创建敌人并向城堡攻击-&让武器可以消灭敌人-&添加判断胜利与否-&完善,包括添加胜利和失败的图片和各种音效”。按照这个顺序,逐渐搭建起整个游戏。由于pygame包包含很多东西,很多都不需要自己动手写,直接调用那些功能即可。
  二、问题以及需要注意的地方
  1、IDE
  这个问题我不知道是设置的问题还是我自己理解有问题,我用的pycharm,虽然最近开源了但是我还是下了一个专业版然后找了注册码。有些无语的是当出现需要用逗号分隔的时候,对空格的个数也有要求。比如width, height = 480, 640逗号和后面的变量名或者数字都要求有一个空格,多了少了空格会提示你。可能是pycharm的代码检查太严格了吧,如果有知道的不吝指教非常感谢。
  2、函数参数
  screen = pygame.display.set_mode((width, height))比如这个函数,它的参数是一个元组(width, height)而不是两个int变量,及其容易看掉,就会报错。
  3、路径
  不管是作者原文还是翻译,源文件都是和资源文件夹在同一目录下,所以在加载画面元素的时候直接就是这样:
  pygame.image.load(&resources/images/dude.png&)
  但是我从来不喜欢源文件和资源文件夹在一起,肯定会建包。所以在路径上就不是上面那样的简单。而且这是一个好习惯,这个比较简单可能只有一个文件所以容易看得清,以后写别的程序有很多源文件就不那么容易了。所以养成好习惯。这样就得先拿到父级路径然后从父级目录进入resources目录。
  python已经提供了获取各种目录的方法。这个网上资料比较多,也可以查看官方文档。
  需要引入模块import os。
  os.getcwd()获得当前文件的路径(包括该文件)。
  os.path.abspath(os.curdir) 当前目录的绝对路径
  print os.path.abspath('.')&
  .&代表当前的路径
  ..&代表当前路径的上一级路径
  这些对于windows和UNIX是类似的。
  这个游戏里要获得上级目录的路径也很简单,os.path.abspath('..')就可以了。
  如果要改变当前路径,os.chdir(path) 即可, path里填要改变到的目录
  注:查阅了不少博客和文档,当然官方文档没这个,不要通过sys.argv[0]获得当前路径,那是不正确的。sys.argv[0] 是当前执行的Python脚本的文件名,不一定是当前的路径。
  4、数学知识
  这里需要数学的地方不多,简单计算什么的就不说了是个人都会。唯一需要注意的就是里面兔子根据鼠标的位置进行旋转以及射出的箭也是鼠标指向的方向。这里需要一点三角函数的知识。旋转的函数pygame已经提供了但是我们需要提供旋转的角度和弧度。如果没学的稍微看下三角函数就行,学过了一眼就看得懂。
  4、其他就没什么问题了,根据指导一步步来基本都能完成。
  三、缺点与改进:
  并不是没有优点,当然要看到缺点追求改进。虽然这是个入门游戏,可以说入门就行,可是如果要把这个游戏做精还是需要不少改进的。
  1、整体就是一个文件,并且整个流程好大一个while循环下来,感觉比较臃肿也比较难以看懂。可以抽出函数,这样写起来也比较方便。
  2、里面有不少需要加载的元素,路径太多,基本都一样就最后文件名不一样,改进一下。
  3、另外里面兔子竟然可以移动到画面外,不见了=。=虽然这样也不能发射箭了。
  4、玩完了游戏不理是game over还是youwin就只能关闭,可以改进下再玩一次或者推出。
  5、游戏比较简单也比较弱,如果可以调整难度设置时间之类的就比较好了。
  6、. . . . . .&
  需要改进的很多,虽然只是一个入门的小游戏,但是要把它做精做到极致还是很难的。考虑深一点思考多一点一定会有不少收获的。
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&君,已阅读到文档的结尾了呢~~
本章您先 为使用 python 写游戏你需要*** pygame。
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
本章您先 为使用 python 写游戏你需要*** pygame。
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口本系列博客介绍以python+pygame库进行小游戏的开发。有写的不对之处还望各位海涵。
在上一篇博客中,我们学习了pygame事件与设备轮询。/msxh/p/4979380.html
这次我们来一起了解一下如何在pygame中加载位图,以及pygame中一些常用的数学函数。
一、pygame中常用的数学函数
首先介绍两个角度和弧度转换的函数:
math.degress()和math.radians(),用法很简单,只要将数值传进去然后接收返回值就可以了。
math.cos(angle),math.sin(angle),这里的angle使用的是弧度表示的,因此需要先使用math.radians(),将角度转换为弧度然后再传参。
如果要获取当前时间,我们需要使用datetime模块。
首先从datetime导入date和time:
from datetime import datetime, date, time
使用datetime.today()函数可以获取当前的日期和事件:
today = datetime.today()
today变量里面包含了很多信息,如果我们直接将其打印出来:
print today
17:00:23.162000
这样很不方便我们使用,所以需要对其进行进一步的拆分:
today.date()
datetime.date()
today.time()
datetime.time(17, 0, 23, 162000)
如果只需要当前时间而不需要当前日期的话,可以直接使用datetime.today().time()函数:
Time = datetime.today().time()
Time有很多属性,Time.hour&Time.minute&Time.second&&Time.microsecond,看名字就知道是什么了。
二、pygame中加载位图、绘制位图
通常,游戏中需要加载大量的位图,pygame中自带了一些类和函数可以帮助我们轻松的搞定位图加载和绘制。
screen = pygame.display.set_mode
上面的代码,我们在前几期的博客中已经使用过很多次了,实际上pygame.display.set_mode()这个函数会返回一个Surface对象,他是位图的一种。
实例中需要的一些素材可以到这里下载:/cLI5cDKQU8sYG &访问密码 c83a
1.加载位图
在pygame中可以使用pygame.image.load()函数来加载位图。(支持jpg,png,gif,bmp,pcx,tif,tga等多种图片格式)。
现在让我们来加载一个位图试试:
space = pygame.image.load("space.png").convert_alpha()
convert_alpha()方法会使用透明的方法绘制前景对象,因此在加载一个有alpha通道的素材时(比如PNG TGA),需要使用convert_alpha()方法,当然普通的图片也是可以使用这个方法的,用了也不会有什么副作用。
2.绘制位图
Surface对象有一个名为blit()的方法,它可以绘制位图
screen.blit(space, (0,0))
第一个参数是加载完成的位图,第二个参数是绘制的起始坐标。我们来看一下完整的程序和效果:
1 import sys, random, math, pygame
2 from pygame.locals import *
4 pygame.init()
5 screen = pygame.display.set_mode((800,600))
6 pygame.display.set_caption("星空")
7 font = pygame.font.Font(None, 18)
9 space = pygame.image.load("space.png").convert_alpha()
11 while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
keys = pygame.key.get_pressed()
if keys[K_ESCAPE]:
sys.exit()
screen.blit(space, (0,0))
pygame.display.update()
&额,其实我想用一个绕着地球飞的超人小程序,来讲解一下pygame中的位图。星空已经加载上了,下面加载并绘制一个地球。
为了让地球可以在夜空的中间绘制,还得多写几段代码。
planet = pygame.image.load("earth.png").convert_alpha()#获取位图的宽和高
width,height = planet.get_size()#在屏幕的中间绘制地球
screen.blit(planet, (400-width/2,300-height/2))
get_size()可以获取位图的宽度和高度,然后利用他们就可以在确定在屏幕的中间绘制地球了。
最后该绘制我们的超人了。添加代码:
superman = pygame.image.load("superman.png").convert_alpha()
screen.blit(superman,(30,30))
但是超人图像看起来好大啊,画面比例有点不协调,还需要把超人缩小一点。
这里使用pygame.transform 这个模块可以满足我们的需求,这个模块包含了比如缩放,翻转等一些非常有用的函数。
pygame.transform.scale()这是一个快速的缩放函数,可以快速缩放一个图像,但是如果你试过以后就会发现他并不是那么的理想,像素看起来会很密集,有点怪怪的。
幸好它有一个名为pygame.transform.smoothscale()的变体,这个函数通过复杂的计算产生比较平滑的图像,当然它的运行耗时大于快速缩放函数。
superman = pygame.transform.smoothscale(superman,(width//2,height//2))
好了,现在我们该考虑如何让超人绕着地球旋转了。
import sys, random, math, pygame
from pygame.locals import *
class Point(object):
def __init__(self, x, y):
self.__x = x
self.__y = y
#X property
def getx(self): return self.__x
def setx(self, x): self.__x = x
x = property(getx, setx)
#Y property
def gety(self): return self.__y
def sety(self, y): self.__y = y
y = property(gety, sety)
def wrap_angle(angle):
return angle % 360
radius = 250
angle = 0.0
pos = Point(0,0)
old_pos = Point(0,0)
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("星空")
font = pygame.font.Font(None, 18)
space = pygame.image.load("space.png").convert_alpha()
planet = pygame.image.load("earth.png").convert_alpha()
superman = pygame.image.load("superman.png").convert_alpha()
width,height = superman.get_size()
superman = pygame.transform.smoothscale(superman,(width//2,height//2))
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
keys = pygame.key.get_pressed()
if keys[K_ESCAPE]:
sys.exit()
screen.blit(space, (0,0))
angle = wrap_angle(angle - 0.1)
pos.x = math.sin( math.radians(angle) ) * radius
pos.y = math.cos( math.radians(angle) ) * radius
#获取位图的宽和高
width,height = planet.get_size()
#在屏幕的中间绘制地球
screen.blit(planet, (400-width/2,300-height/2))
width,height = superman.get_size()
screen.blit(superman,(400+pos.x-width//2,300+pos.y-height//2))
pygame.display.update()
在这里,定义了一个point类,方便我们表示图像的坐标,然后分别实现了set 和get方法,很简单的,看代码就可以理解了。
然后又定义了一个wrap_angle(angle)函数。他会返回一个0~360之间的角度。
运行看一下,超人可以绕着地球旋转了,但是看起来比较僵硬,最好让他自己也能旋转,指向他移动的方向,以便让画面柔和一些。
这里我们需要math.atan2()这个函数,它用于计算反正切函数,需要传递两个参数:delta_x,delta_y。delta_x,delta_y表示两个坐标x,y之间的距离
工作流程是这样的:先记录飞船的最近位置,然后使用当前位置和最近位置调用atan2函数,然后再给atan2函数的返回值加上180.
我们还需要一个函数是pygame.transform.rotate(),没错,它可以用来旋转位图,需要传两个参数:图像,旋转角度。
1 import sys, random, math, pygame
2 from pygame.locals import *
4 class Point(object):
def __init__(self, x, y):
self.__x = x
self.__y = y
def getx(self): return self.__x
def setx(self, x): self.__x = x
x = property(getx, setx)
def gety(self): return self.__y
def sety(self, y): self.__y = y
y = property(gety, sety)
17 def wrap_angle(angle):
return angle % 360
20 radius = 250
21 angle = 0.0
22 pos = Point(0,0)
23 old_pos = Point(0,0)
25 pygame.init()
26 screen = pygame.display.set_mode((800,600))
27 pygame.display.set_caption("星空")
28 font = pygame.font.Font(None, 18)
30 space = pygame.image.load("space.png").convert_alpha()
31 planet = pygame.image.load("earth.png").convert_alpha()
32 superman = pygame.image.load("superman.png").convert_alpha()
33 width,height = superman.get_size()
34 superman = pygame.transform.smoothscale(superman,(width//2,height//2))
37 while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
keys = pygame.key.get_pressed()
if keys[K_ESCAPE]:
sys.exit()
screen.blit(space, (0,0))
angle = wrap_angle(angle - 0.1)
pos.x = math.sin( math.radians(angle) ) * radius
pos.y = math.cos( math.radians(angle) ) * radius
#获取位图的宽和高
width,height = planet.get_size()
#在屏幕的中间绘制地球
screen.blit(planet, (400-width/2,300-height/2))
delta_x = ( pos.x - old_pos.x )
delta_y = ( pos.y - old_pos.y )
rangle = math.atan2(delta_y, delta_x)
rangled = wrap_angle( -math.degrees(rangle) )
superman_rotate = pygame.transform.rotate(superman, rangled)
width,height = superman_rotate.get_size()
screen.blit(superman_rotate,(400+pos.x-width//2,300+pos.y-height//2))
pygame.display.update()
old_pos.x = pos.x
old_pos.y = pos.y
运行一下,现在超人可以非常满意的绕着地球旋转了,效果看起来还是不错的。
下个博客我们将一起开发一个小游戏,巩固之前学到的知识。
阅读(...) 评论()
友情链接:温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
很酷不拉风会死~~
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
顶着锅盖闯火星推荐阅读:
& 22:32:28
阅读(442)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'pygame新手指南',
blogAbstract:'Pygame是SDL的一个python封装,由Pete Shinners编写。使用pygame,你可以用Python写游戏或其它的多媒体应用程序,它们将稳定地运行在SDL支持的任何平台上(Windows,Unix,Mac,beOS和其它等等)。Pygame容易学习,但是图形编程的世界对于新来者来说,可能是相当混乱的。我写这篇文章的目的是试图提炼出我过去那些年来所获得的或使用pygame的得到的那些有用的知识。Pygame的前身是pySDL。我是按照这些问题的重要性的次序来排列的,但是这些心得对你的帮助程序取决于你自己的知识背景和你的项目的情况。1、熟练使用python如果你使用你不熟悉的语言进行图形编程的话,学起来会比较复杂的。用Python写一些量不大的非图形化程序——分析一些文本文件,写一些竞猜类游戏或记',
blogTag:'',
blogUrl:'blog/static/8',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:8,
permalink:'blog/static/8',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'很酷不拉风会死~~',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}Python:pygame游戏编程之旅五(游戏界面文字处理详解)
再简单的游戏界面中均涉及文字处理,本节主要解读一下pygame模块中对文字及字体的处理方式。 同样,以实例进行讲解,先看看代码:
#!/usr/bin/env python&&
# -*- coding: utf-8 -*-&&
import sys&
import os&
import pygame&
from pygame.locals import *&
def load_image(pic_name):&
&&& '''''
&&& Function:图片加载函数
&&& Input:pic_name 图片名称
&&& Output: NONE
&&& author: dyx1024
&&& blog:http://blog.csdn.net/dyx1024
&&& '''&
&&& #获取当前脚本文件所在目录的绝对路径&&
&&& current_dir = os.path.split(os.path.abspath(__file__))[0]&
&&& #指定图片目录&&
&&& path = os.path.join(current_dir, 'image', pic_name)&
&&& #加载图片&&
&&& return pygame.image.load(path).convert()&
def init_windows():&
&&& '''''
&&& Function:窗口初始化
&&& Input:NONE
&&& Output: NONE
&&& author: dyx1024
&&& blog:http://blog.csdn.net/dyx1024
&&& '''&&&&&
&&& pygame.init()&
&&& display_surface = pygame.display.set_mode((600, 500))&
&&& pygame.display.set_caption('游戏中的文字处理
&&& return display_surface&
def exit_windows():&
&&& '''''
&&& Function:退出处理
&&& Input:NONE
&&& Output: NONE
&&& author: dyx1024
&&& blog:http://blog.csdn.net/dyx1024
&&& '''&&&&&&&
&&& pygame.quit()&
&&& sys.exit()&
def main():&
&&& '''''
&&& Function:字体处理
&&& Input:NONE
&&& Output: NONE
&&& author: dyx1024
&&& blog:http://blog.csdn.net/dyx1024
&&& '''&&&&&&&&&
&&& screen_surface = init_windows()&
&&& back_image = load_image('mengqiqi.jpg')&
&&& color_red = (255, 0, 0)&
&&& color_green = (0, 255, 0)&
&&& color_blue& = (0, 0, 255)&
&&& #第一组文字&&
&&& #创建一个Font对象,其中LOWRBI__.TTF为下载的字体库&&
&&& fontObj = pygame.font.Font('LOWRBI__.TTF', 32)&
&&& #创建一个存放文字surface对象,&&
&&& textSurfaceObj = fontObj.render(u'HELLO MONCHHICHI', False, color_green)&
&&& #文字图像位置&&
&&& textRectObj = textSurfaceObj.get_rect()&
&&& #第二组文字&&
&&& fontObj2 = pygame.font.Font('simkai.TTF', 20)&
&&& #添加下画线&&
&&& fontObj2.set_underline(True)&
&&& textSurfaceObj2 = fontObj2.render(u'很萌,有木有!', False, color_red)&
&&& textRectObj2 = textSurfaceObj2.get_rect()&
&&& textRectObj2.center = (80, 480)&
&&& #第三组文字&&
&&& #使用系统字体&&
&&& fontObj3 = pygame.font.SysFont('宋体', 20)&
&&& #加粗&&
&&& fontObj3.set_bold(True)&
&&& #斜体&&
&&& fontObj3.set_italic(True)&
&&& #文字具有蓝色背景&&
&&& textSurfaceObj3 = fontObj3.render(u'又到凌晨了,睡', True, color_red, color_blue)&
&&& textRectObj3 = textSurfaceObj3.get_rect()&
&&& textRectObj3.center = (500, 10)&
&&& while True:&
&&&&&&& #绘图&&
&&&&&&& screen_surface.blit(back_image, (0, 0))&
&&&&&&& screen_surface.blit(textSurfaceObj, textRectObj)&
&&&&&&& screen_surface.blit(textSurfaceObj2, textRectObj2)&
&&&&&&& screen_surface.blit(textSurfaceObj3, textRectObj3)&
&&&&&&& for event in pygame.event.get():&
&&&&&&&&&&& if event.type == QUIT:&
&&&&&&&&&&&&&&& exit_windows()&
&&&&&&& pygame.display.update()&
if __name__ == '__main__':&
&&& main()&
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import pygame
from pygame.locals import *
def load_image(pic_name):
&&& '''
&&& Function:图片加载函数
&&& Input:pic_name 图片名称
&&& Output: NONE
&&& author: dyx1024
&&& blog:http://blog.csdn.net/dyx1024
&&& '''
&&& #获取当前脚本文件所在目录的绝对路径
&&& current_dir = os.path.split(os.path.abspath(__file__))[0]
&&& #指定图片目录
&&& path = os.path.join(current_dir, 'image', pic_name)
&&& #加载图片
&&& return pygame.image.load(path).convert()
def init_windows():
&&& '''
&&& Function:窗口初始化
&&& Input:NONE
&&& Output: NONE
&&& author: dyx1024
&&& blog:http://blog.csdn.net/dyx1024
&&& '''&&&
&&& pygame.init()
&&& display_surface = pygame.display.set_mode((600, 500))
&&& pygame.display.set_caption('游戏中的文字处理
&&& return display_surface
def exit_windows():
&&& '''
&&& Function:退出处理
&&& Input:NONE
&&& Output: NONE
&&& author: dyx1024
&&& blog:http://blog.csdn.net/dyx1024
&&& '''&&&&&
&&& pygame.quit()
&&& sys.exit()
def main():
&&& '''
&&& Function:字体处理
&&& Input:NONE
&&& Output: NONE
&&& author: dyx1024
&&& blog:http://blog.csdn.net/dyx1024
&&& '''&&&&&&&
&&& screen_surface = init_windows()
&&& back_image = load_image('mengqiqi.jpg')
&&& color_red = (255, 0, 0)
&&& color_green = (0, 255, 0)
&&& color_blue& = (0, 0, 255)
&&& #第一组文字
&&& #创建一个Font对象,其中LOWRBI__.TTF为下载的字体库
&&& fontObj = pygame.font.Font('LOWRBI__.TTF', 32)
&&& #创建一个存放文字surface对象,
&&& textSurfaceObj = fontObj.render(u'HELLO MONCHHICHI', False, color_green)
&&& #文字图像位置
&&& textRectObj = textSurfaceObj.get_rect()
&&& #第二组文字
&&& fontObj2 = pygame.font.Font('simkai.TTF', 20)
&&& #添加下画线
&&& fontObj2.set_underline(True)
&&& textSurfaceObj2 = fontObj2.render(u'很萌,有木有!', False, color_red)
&&& textRectObj2 = textSurfaceObj2.get_rect()
&&& textRectObj2.center = (80, 480)
&&& #第三组文字
&&& #使用系统字体
&&& fontObj3 = pygame.font.SysFont('宋体', 20)
&&& fontObj3.set_bold(True)
&&& fontObj3.set_italic(True)
&&& #文字具有蓝色背景
&&& textSurfaceObj3 = fontObj3.render(u'又到凌晨了,睡', True, color_red, color_blue)
&&& textRectObj3 = textSurfaceObj3.get_rect()
&&& textRectObj3.center = (500, 10)
&&& while True:
&&&&&&& #绘图
&&&&&&& screen_surface.blit(back_image, (0, 0))
&&&&&&& screen_surface.blit(textSurfaceObj, textRectObj)
&&&&&&& screen_surface.blit(textSurfaceObj2, textRectObj2)
&&&&&&& screen_surface.blit(textSurfaceObj3, textRectObj3)
&&&&&&& for event in pygame.event.get():
&&&&&&&&&&& if event.type == QUIT:
&&&&&&&&&&&&&&& exit_windows()
&&&&&&& pygame.display.update()
if __name__ == '__main__':
&&& main()
&做一些解释:
&1、fontObj = pygame.font.Font('LOWRBI__.TTF', 32)
& 此句创建了一个Font类的对象,原型为:pygame.font.Font(filename, size): return Font
& 其中filename为字体文件,windows下字体文件所在目录为:C:\WINDOWS\Fonts,以TTF后续结尾。
& 例如,我的机器上字体如下:
-rwxrwx---+ 1 Administrators SYSTEM&& 367112 八月 17 2004 arial.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 352224 八月 17 2004 arialbd.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 226748 八月 17 2004 arialbi.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 207808 八月 17 2004 ariali.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 117028 八月 17 2004 ariblk.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 127596 八月 17 2004 comic.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 111476 八月 17 2004 comicbd.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 303296 八月 17 2004 cour.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 312920 八月 17 2004 courbd.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 236148 八月 17 2004 courbi.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 245032 八月 17 2004 couri.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&&& 79744 八月 17 2004 estre.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 135984 八月 17 2004 framd.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 152844 八月 17 2004 framdit.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 214936 八月 17 2004 gautami.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 155068 八月 17 2004 georgia.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 141032 八月 17 2004 georgiab.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 157388 八月 17 2004 georgiai.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 159736 八月 17 2004 georgiaz.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 136076 八月 17 2004 impact.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 121452 八月 17 2004 kartika.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 323980 八月 17 2004 l_10646.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&&& 73292 八月 17 2004 latha.ttf&
-rwx------+ 1 socrates&&&&&& None&&&& 493540 十二& 2 2008 lingoes.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&&& 58740 八月 17 2004 lsans.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&&& 54320 八月 17 2004 lsansd.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&&& 60664 八月 17 2004 lsansdi.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&&& 59636 八月 17 2004 lsansi.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 115068 八月 17 2004 lucon.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 143864 八月 17 2004 mangal.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&&& 24124 八月 17 2004 marlett.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 460728 八月 17 2004 micross.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&&& 40500 八月 17 2004 mvboli.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 123424 十二& 9 2002 nina.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 131424 十二& 9 2002 ninab.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 489884 八月 17 2004 pala.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 434004 八月 17 2004 palab.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 344288 八月 17 2004 palabi.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 430800 八月 17 2004 palai.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&&& 57348 八月 17 2004 raavi.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 234280 八月 17 2004 shruti.ttf&
-rwxrwx---+ 1 Administrators SYSTEM& 3996872 八月 17 2004 simfang.ttf&
-rwxrwx---+ 1 Administrators SYSTEM
八月 17 2004 simhei.ttf&
-rwxrwx---+ 1 Administrators SYSTEM& 4135804 八月 17 2004 simkai.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 221676 八月 17 2004 sylfaen.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&&& 69464 八月 17 2004 symbol.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 383140 八月 17 2004 tahoma.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 355436 八月 17 2004 tahomabd.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 409280 八月 17 2004 times.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 398372 八月 17 2004 timesbd.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 239692 八月 17 2004 timesbi.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 248368 八月 17 2004 timesi.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 134108 八月 17 2004 trebuc.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 123096 八月 17 2004 trebucbd.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 131188 八月 17 2004 trebucbi.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 139288 八月 17 2004 trebucit.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 148636 八月 17 2004 tunga.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 171792 八月 17 2004 verdana.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 137616 八月 17 2004 verdanab.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 155076 八月 17 2004 verdanai.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 154800 八月 17 2004 verdanaz.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 252820 八月 17 2004 vrinda.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 118752 八月 17 2004 webdings.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&&& 81000 八月 17 2004 wingding.ttf&
-rwxrwx---+ 1 Administrators SYSTEM&& 367112 八月 17 2004 arial.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 352224 八月 17 2004 arialbd.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 226748 八月 17 2004 arialbi.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 207808 八月 17 2004 ariali.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 117028 八月 17 2004 ariblk.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 127596 八月 17 2004 comic.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 111476 八月 17 2004 comicbd.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 303296 八月 17 2004 cour.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 312920 八月 17 2004 courbd.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 236148 八月 17 2004 courbi.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 245032 八月 17 2004 couri.ttf
-rwxrwx---+ 1 Administrators SYSTEM&&& 79744 八月 17 2004 estre.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 135984 八月 17 2004 framd.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 152844 八月 17 2004 framdit.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 214936 八月 17 2004 gautami.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 155068 八月 17 2004 georgia.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 141032 八月 17 2004 georgiab.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 157388 八月 17 2004 georgiai.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 159736 八月 17 2004 georgiaz.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 136076 八月 17 2004 impact.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 121452 八月 17 2004 kartika.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 323980 八月 17 2004 l_10646.ttf
-rwxrwx---+ 1 Administrators SYSTEM&&& 73292 八月 17 2004 latha.ttf
-rwx------+ 1 socrates&&&&&& None&&&& 493540 十二& 2 2008 lingoes.ttf
-rwxrwx---+ 1 Administrators SYSTEM&&& 58740 八月 17 2004 lsans.ttf
-rwxrwx---+ 1 Administrators SYSTEM&&& 54320 八月 17 2004 lsansd.ttf
-rwxrwx---+ 1 Administrators SYSTEM&&& 60664 八月 17 2004 lsansdi.ttf
-rwxrwx---+ 1 Administrators SYSTEM&&& 59636 八月 17 2004 lsansi.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 115068 八月 17 2004 lucon.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 143864 八月 17 2004 mangal.ttf
-rwxrwx---+ 1 Administrators SYSTEM&&& 24124 八月 17 2004 marlett.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 460728 八月 17 2004 micross.ttf
-rwxrwx---+ 1 Administrators SYSTEM&&& 40500 八月 17 2004 mvboli.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 123424 十二& 9 2002 nina.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 131424 十二& 9 2002 ninab.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 489884 八月 17 2004 pala.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 434004 八月 17 2004 palab.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 344288 八月 17 2004 palabi.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 430800 八月 17 2004 palai.ttf
-rwxrwx---+ 1 Administrators SYSTEM&&& 57348 八月 17 2004 raavi.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 234280 八月 17 2004 shruti.ttf
-rwxrwx---+ 1 Administrators SYSTEM& 3996872 八月 17 2004 simfang.ttf
-rwxrwx---+ 1 Administrators SYSTEM
八月 17 2004 simhei.ttf
-rwxrwx---+ 1 Administrators SYSTEM& 4135804 八月 17 2004 simkai.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 221676 八月 17 2004 sylfaen.ttf
-rwxrwx---+ 1 Administrators SYSTEM&&& 69464 八月 17 2004 symbol.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 383140 八月 17 2004 tahoma.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 355436 八月 17 2004 tahomabd.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 409280 八月 17 2004 times.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 398372 八月 17 2004 timesbd.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 239692 八月 17 2004 timesbi.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 248368 八月 17 2004 timesi.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 134108 八月 17 2004 trebuc.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 123096 八月 17 2004 trebucbd.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 131188 八月 17 2004 trebucbi.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 139288 八月 17 2004 trebucit.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 148636 八月 17 2004 tunga.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 171792 八月 17 2004 verdana.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 137616 八月 17 2004 verdanab.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 155076 八月 17 2004 verdanai.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 154800 八月 17 2004 verdanaz.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 252820 八月 17 2004 vrinda.ttf
-rwxrwx---+ 1 Administrators SYSTEM&& 118752 八月 17 2004 webdings.ttf
-rwxrwx---+ 1 Administrators SYSTEM&&& 81000 八月 17 2004 wingding.ttf
& 注意,最好将你要用到的文件复制一份到脚本所在目录下,这样在游戏发布时,可以一起打包,解决了目标机器上可能没有所使用字体的问题,另,如果需要特殊字体,可从网上下载,使用方法一样。
&第二个参数size为字体大小。
&2、textSurfaceObj = fontObj.render(u'HELLO MONCHHICHI', False, color_green)
&&&& 此句为Font对象fontObj加载内容,并可设置颜色,格式等。
&&& 原型如下:Font.render(text, antialias, color, background=None): return Surface
& 参数解释:
&&&&&& text :要显示的文字内容,仅支持单行,即不能使用\n进行换行,如要打印多行,要建立多个font对象。
&&&&& antialias:字体的边缘是否平滑,true表示平滑,false表示带有毛边。
&&&&& color:文字颜色,取值RGB
&&&&& background:文字背景色,可选。
3、textRectObj = textSurfaceObj.get_rect()
&&&& 为testSurface创建一个Rect对象,大小由所有显示的文本高度及宽度决定。
4、设置字体加粗、下画线、斜体等属性,使用以下方法。
&&&&& Font.set_bold(bool): return None
&&&&& Font.set_underline(bool): return None
&&&&& Font.set_italic (bool): return None
摘自 Socrates的专栏
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'

参考资料

 

随机推荐