pygame的基本使用
作者:互联网
游戏最基本系统
import pygame # 1初始化操作 pygame.init() # 2创建游戏窗口 # set_mode(大小) window = pygame.display.set_mode((400, 600)) # 设置游戏名 pygame.display.set_caption('我的游戏') # 设置背景颜色 window.fill((255, 255, 255)) pygame.display.flip() # 3.让游戏保持一直运行的状态 # game loop 游戏循环(检测事件) while True: # 4.检测事件(比如鼠标,键盘的点击检测) # 固定写法,event,get可以一次获取多个事件,所以要循环遍历 for event in pygame.event.get(): # 判断是否退出(点×) if event.type == pygame.QUIT: # 退出函数(一般不会这么简单,要保存) exit()
显示图片
import pygame pygame.init() window = pygame.display.set_mode((800, 600)) pygame.display.set_caption('显示图片') window.fill((255, 255, 255)) # =======一般写游戏开始页面静态图========= # 1.准备图片,把图片加载到pycharm中 # pygame.image.load返回的是一个图片对象 image1 = pygame.image.load('playground.jpg') # 2.渲染图片(把图片放到到游戏窗口中) # blit(渲染对象,坐标)坐标以左上角作为坐标原点 window.blit(image1, (0, 0)) # 3.操作图片(改变图片位置,大小等) # )1获取图片大小:w,h=image1.get_size # )2旋转和缩放 # scale(缩放对象,缩放目标大小)会发生生形变 new1 = pygame.transform.scale(image1, (100, 100)) window.blit(new1, (210, 0)) # rotozoom(缩放或者旋转对象,旋转角度(逆时针),缩放比例) new2 = pygame.transform.rotozoom(image1, 0, 0.5) window.blit(new2, (0, 200)) # 4.刷新显示页面图片才能显示到游戏窗口中,每次修改游戏窗口都要刷新才能执行 pygame.display.flip() # 第一次刷新用这个,第二次用pygame.display.update while True: # ======一般写游戏帧的刷新===== for event in pygame.event.get(): if event.type == pygame.QUIT: exit()
文字的使用
import pygame pygame.init() window = pygame.display.set_mode((800, 600)) pygame.display.set_caption('显示文字') window.fill((255, 255, 255)) # ==========显示文字=========== # 1.创建字体对象 # pygame.font.SysFont()系统字体,不常用 # Font(字体文件路径,字号) font = pygame.font.Font('aa.ttf', 30) # 2. 创建文字对象 # render(文章内容,Ture,文字颜色,背景颜色(可不写)) text = font.render('游戏你好', True, (255, 0, 0), (255, 255, 0)) # 3.渲染到窗口上 window.blit(text, (0, 0)) # 4.操作文字对象 # 1获取图片大小:w,h=image1.get_size # )2旋转和缩放 # scale(缩放对象,缩放目标大小)会发生生形变 # rotozoom(缩放或者旋转对象,旋转角度(逆时针),缩放比例) w, h = text.get_size() window.blit(text, (800 - w, 600 - h)) new1 = pygame.transform.rotozoom(text, 0, 2.5) window.blit(new1, (0, 200)) # 5.刷新 pygame.display.flip() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit()
显示图形
mport pygame from math import pi pygame.init() window = pygame.display.set_mode((800, 600)) pygame.display.set_caption('显示图形') window.fill((255, 255, 255)) # ==========显示图形=========== # 1,画直线pygame.draw.line(画在哪里,线的颜色,(线的起点,线的终点),线宽(默认为1)) pygame.draw.line(window, (255, 0, 0), (10, 20), (200, 20)) # 2,画折线lines(画在哪里,线的颜色,是否闭合(T/F),线的点坐标(可以有很多个),线宽(默认为1)) points = [(10, 300), (100, 160), (180, 260), (300, 100)] pygame.draw.lines(window, (0, 255, 0), True, points, 3) # 3,画圆circle(画在哪里,线的颜色,(圆心坐标,半径),线宽(默认为0填充)) pygame.draw.circle(window, (0, 0, 255), (200, 250), 100, 2) # 4.画矩形rect(画在哪里,线的颜色,矩形范围(x坐标,y坐标,长,宽),线宽(默认为0填充)) pygame.draw.rect(window, (120, 20, 60), (100, 70, 100, 200), 2) # 5,画椭圆ellipse(画在哪里,线的颜色矩形范围(x坐标,y坐标,长,宽),线宽(默认为0填充)) pygame.draw.ellipse(window, (255, 0, 0), (100, 70, 200, 100), 2) # 6.画弧形arc(画在哪里,线的颜色矩形范围(x坐标,y坐标,长,宽),起始弧度,终止弧度,线宽) pygame.draw.arc(window, (0, 0, 0), (100, 70, 100, 200), 0, pi, 5) pygame.display.flip() while True: # ======一般写游戏帧的刷新===== for event in pygame.event.get(): if event.type == pygame.QUIT: exit()
动画原理
import pygame pygame.init() window = pygame.display.set_mode((800, 600)) pygame.display.set_caption('显示图形') window.fill((255, 255, 255)) # 1 显示静态图 y = 100 r = 50 pygame.draw.circle(window, (255, 0, 0), (100, 100), 50) pygame.display.flip() # 游戏循环 # 统计循环变量 num = 1 while True: # 1,移动动画 num += 1 # if num % 1000 == 0: # pygame.draw.circle(window, (255, 255, 255), (100, y), 50) # y = y + 1 # pygame.draw.circle(window, (255, 0, 0), (100, y), 50) # pygame.display.update() # 2,缩放动画 if num % 10000 == 0: r += 1 pygame.draw.circle(window, (255, 0, 0), (100, 100), r) pygame.display.update() for event in pygame.event.get(): if event.type == pygame.QUIT: exit()
动画的应用
import pygame h = 800 w = 600 pygame.init() window = pygame.display.set_mode((h, w)) pygame.display.set_caption('动画应用') window.fill((255, 255, 255)) # 静态球 x, y = 200, 30 r = 30 y_speed = 1 pygame.draw.circle(window, (0, 255, 0), (x, y), r) pygame.display.flip() num = 0 while True: # ======一般写游戏帧的刷新===== num += 1 # 小球反弹 if num % 5000 == 0: pygame.draw.circle(window, (255, 255, 255), (x, y), r) y += y_speed if y >= (h - 8 * r): y_speed = y_speed * -1 if y <= r: y_speed = y_speed * -1 pygame.draw.circle(window, (0, 255, 0), (x, y), r) pygame.display.update() for event in pygame.event.get(): if event.type == pygame.QUIT: exit()
事件检测
import pygame from random import randint h = 800 w = 600 pygame.init() window = pygame.display.set_mode((h, w)) pygame.display.set_caption('鼠标事件') window.fill((255, 255, 255)) pygame.display.flip() font = pygame.font.Font('aa.ttf', 30) tx = 0 count = 0 # 统计事件发生的速度 while True: # 检测事件 for event in pygame.event.get(): # for循环中的代码只有事件发生后才会运行 count += 1 print(count) # event的type属性是用来区分不同类型的事件 """ QUIT:点击关闭按钮对应的事件 1.鼠标事件 MOUSEBUTTONDOWN:鼠标摁下 MOUSEBUTTONUP:鼠标弹起 MOUSEMOTION:鼠标移动 鼠标位置属性(点在哪)-pos 2.键盘事件 KEYDOWN 键盘摁下 KEYUP 键盘弹起 键盘按键对应值的属性(哪个键被摁了):key """ if event.type == pygame.QUIT: exit() # =================鼠标事件================= if event.type == pygame.MOUSEBUTTONDOWN: if event.button == 1: # 如果是摁下鼠标左键 print('左键鼠标摁下', event.pos) mx, my = event.pos # 取出鼠标的x坐标和y坐标 pygame.draw.circle(window, (255, 255, 0), (mx, my), 50) pygame.display.update() elif event.button == 3: # 如果是摁下鼠标右键 print('右键鼠标摁下', event.pos) mx, my = event.pos # 取出鼠标的x坐标和y坐标 pygame.draw.circle(window, (255, 255, 255), (mx, my), 50) pygame.display.update() if event.type == pygame.MOUSEBUTTONUP: print('鼠标弹起', event.pos) if event.type == pygame.MOUSEMOTION: print('鼠标移动', event.pos) mx, my = event.pos # 取出鼠标的x坐标和y坐标 r = randint(0, 255) g = randint(0, 255) b = randint(0, 255) pygame.draw.circle(window, (r, g, b), (mx, my), 10) pygame.display.update() # ================键盘事件================== if event.type == pygame.KEYDOWN: print('键盘摁下', chr(event.key)) if chr(event.key) == 'f': print('闪现') text = font.render(chr(event.key), True, (255, 0, 0)) window.blit(text, (tx, 300)) tx += 15 pygame.display.update() if event.type == pygame.KEYUP: print('键盘弹起', chr(event.key)) # get_pressed会返回0或1来判断 # keys = pygame.key.get_pressed() # if keys[pygame.K_w]: # 如果按下方向键下 # mario.rect.y += 10 # if keys[pygame.K_s]: # mario.rect.y -= 10
控制按钮
import pygame h, w = 800, 600 pygame.init() window = pygame.display.set_mode((h, w)) pygame.display.set_caption('鼠标事件') window.fill((255, 255, 255)) pygame.display.flip() font = pygame.font.Font('aa.ttf', 30) # 1,确定按钮 bx1, by1, bw, bh = 30, 100, 100, 50 pygame.draw.rect(window, (255, 0, 0), (bx1, by1, bw, bh)) text1 = font.render('确定', True, (255, 255, 255)) tw1, th1 = text1.get_size() tx1 = bx1 + bw / 2 - tw1 / 2 ty1 = by1 + bh / 2 - th1 / 2 window.blit(text1, (tx1, ty1)) # 2,取消按钮 bx2, by2 = 30, 200 pygame.draw.rect(window, (0, 255, 0), (bx2, by2, 100, 50)) text2 = font.render('取消', True, (255, 255, 255)) tw2, th2 = text2.get_size() tx2 = bx2 + bw / 2 - tw2 / 2 ty2 = by2 + bh / 2 - th2 / 2 window.blit(text2, (tx2, ty2)) pygame.display.update() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() # 按钮点击事件 if event.type == pygame.MOUSEBUTTONDOWN: mx, my = event.pos # 是否点击了确定按钮 if bx1 + bw >= mx >= bx1 and by1 + bh >= my >= by1: pygame.draw.rect(window, (200, 200, 200), (bx1, by1, bw, bh)) window.blit(text1, (tx1, ty1)) pygame.display.update() # 是否点击了取消按钮 elif bx2 + bw >= mx >= bx2 and by2 + bh >= my >= by2: pygame.draw.rect(window, (200, 200, 200), (bx2, by2, bw, bh)) window.blit(text2, (tx2, ty2)) pygame.display.update() if event.type == pygame.MOUSEBUTTONUP: pygame.draw.rect(window, (255, 0, 0), (bx1, by1, bw, bh)) window.blit(text1, (tx1, ty1)) pygame.display.update() pygame.draw.rect(window, (0, 255, 0), (bx2, by2, bw, bh)) window.blit(text2, (tx2, ty2)) pygame.display.update()
一个基于pygame制作的游戏截图(非自制)
标签:基本,draw,display,window,pygame,使用,event,255 来源: https://www.cnblogs.com/tingwen123/p/16311525.html