import sys
import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300)) #元组赋予窗口大小
#screen具有了pygame.display.set_mode所有的属性方法
pygame.display.set_caption('Gluttonous snake')
while True:
"""主程序循环"""
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
pygame.display.update()
代表将图片加载到内存中。一般将图片打包在同一文件中,该文件夹与py文件放置在同一文件夹下。
self.image = pygame.image.load('images/ship.bmp')
rect根据加载的surface图片生成矩形框,所有运动的操作都针对矩形框
rect的属性主要包括left、 top、 right 、bottom 和center中的centerx、centery以及尺寸size、width、height
Rect(left,top,width,height),可理解为构造左上角点坐标为(left、top)宽为width,长为height
"""在(0,0)处创建子弹矩形,并设置位置"""
self.rect = pygame.Rect(0, 0, ai_settings.bullet_width,
ai_settings.bullet_height)
A.rect = B.get_rect(),其中B为加载到内存中的surface图片。该命令使得A获得图片所有的rect属性。
#加载外星人图像,并设置其rect属性
self.image = pygame.image.load('images/alien.bmp')
self.rect = self.image.get_rect()
*题外话:例子全部是创建类的情况。A.b的命名方式更易读懂,其中的b代表属性。当A.b.c时是调用属性b后的c属性如,下面代码的等号右。命名时也应该遵循这样的要求,如再下一行代码
self.rect.x = self.rect.width
self.rect.y = self.rect.height
self.screen_rect = screen.get_rect()
#当
self.screen.rect = screen.get_rect() #报错screen无rect属性
☆常用1:矩形在窗口中
self.rect.left > 0
and self.rect.right < screen_rect.width
and self.rect.top >0
and self.rect.bottom < screen_rect.height
☆常用2:矩形在窗口中居中
self.rect.centerx = screen_rect.centerx #横轴居中
跟随矩形框位置绘制图片,可看出属于screen下可调用的方法
窗口最终只显示主图层,rect对应主图层部分区域,而surface不在主图层上显示,通过blit
"""绘制飞船位置"""
self.screen.blit(self.image, self.rect)
图片加载生成后可用blit绘制图片,用Rect生成的矩形绘制在屏幕上,用draw
pygame.draw.rect(self.screen, self.color, self.rect)
pygame.draw.circle(self.screen, self.color, self.pos, self.radius) #后两个为圆心和半径
#除屏幕和颜色外参数外,其他为图形参数
参数有screen,填充色,矩形框
以颜色重绘填充屏幕,因为矩形移动后留下是白色
面向用户的刷新显示,其中update只刷新变化区域
A = pygame.time.Clock() #创建对象
A.tick(fps) #fps对应每秒钟出现的静态图像,多则流畅
rect.move(x, y) ,其中x,y为上一次相对距离
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN: #keydown返回常量名称、修饰符等
#修饰符为ctrl shift等键
if event.key == pygame.K_RIGHT: #按压向右键,K_RIGHT常量名称
speed[0] = speed[0] + 1
elif event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT: #松开向右键
speed[0] = speed[0] - 1
#1
pygame.display.set_mode(size, type)
#设置尺寸和相关模式,
#其中type包括pygame.RESIZEABLE:大小可调,pygame.NOFRAME:无边框,#pygame.FULLSCREEN:全屏幕显示,注意修改后的逻辑
#配合pygame.RESIZEABLE:大小可调的操作逻辑:
elif event.type == pygame.VIDEORESIZE:
size = (event.size[0], event.size[1])
screen = pygame.display.set_mode(size, pygame.RESIZABLE)
#2
pygame.display.info() #获取信息,如current_w,current_h
#vInfo = pygame.display.info(),感知当前屏幕信息
#screen = pygame.display.set_mode(vInfo.current_w, vInfo.current_h) 根据当前屏幕分辨率全屏显示
#3
pygame.display.set_caption() #标题
pygame.display.set_icon() #设置图标,以surface图像表示
pygame.display.get_caption() #返回当前标题名
#4
pygame.display.get_active() #非最小化是2返回True
#屏幕刷新函数
需要先import pygame.freetype
字体为rect
注:不能出现在fill()前,否则会被覆盖。
字体存放在C:\Windows\Fonts 字体格式*.ttf,*.ttc
A = pygame.freetype.Font('C://windows//Fonts//msyh.ttc', 36)
A1 = A.render_to(screen,(200, 160), '世界和平',
(168, 168, 168), (0, 0, 0), 5) #方法1,此处size = 5代替36
A2 = A.render('世界和平', (168, 168, 168), 5) #方法2
#让文字居中的方法(center与屏幕center对齐没用)
word_load = pygame.freetype.Font('C://windows//Fonts//simsun.ttc', ai_settings.word_size)
word = word_load.render_to(screen, (0, 0), ai_settings.word, ai_settings.word_color, ai_settings.bg_color)
screen.fill(ai_settings.bg_color)
screen_rect = screen.get_rect()
word = word_load.render_to(screen, (ai_settings.screen_width/2 - word.width / 2, ai_settings.screen_height/2), ai_settings.word, ai_settings.word_color
主要参考:
嵩天教授的Python游戏开发教程(pygame)
Python编程:从入门到实践
欢迎讨论指正