游戏开发过程 学习参考网站:https://www.pygame.org/news 常用函数总结:
# ----------窗口相关操作-----------
# 创建窗口
scene = pygame.display.set_mode([屏幕宽,屏幕高])
# 设置窗口标题
pygame.display.set_caption("标题")
# 设置窗口图标
pygame.display.set_icon(image)
# 将图片绘制到窗口
scene.blit(image, (0, 0))
# ----------图像相关操作-----------
# 加载图片
image = pygame.image.load("图片路径")
# 获得图片矩形 -> Rect(x, y, width, height)
rect = image.get_rect()
# 移动矩形坐标
rect.move_ip(x, y)
# 判断两个矩形是否相交 -> bool
flag = pygame.Rect.colliderect(rect1,rect2)
# ----------事件相关操作-----------
# 获得所有事件列表
event_list = pygame.event.get()
# 常见事件类型
# QUIT 关闭窗口
# MOUSEMOTION 鼠标拖动
# KEYDOWN 键盘按键
# 获得当前所有持续按键 bools_tuple
bool_list = pygame.key.get_pressed()
# ----------音效相关操作-----------
# 加载背景音乐
pygame.mixer.music.load("./res/bg2.ogg")
# 播放背景音乐,-1表示循环播放
pygame.mixer.music.play(-1)
# 加载音效
self.bomb = pygame.mixer.Sound("./res/baozha.ogg")
# 播放音效
pygame.mixer.Sound.play(self.bomb)
1.用pygame建立一个游戏界面
# 建立一个界面
import pygame
import sys
pygame.init() # pygame 初始化
pygame.display.set_caption("我的第一个游戏") # 窗口的标题
screen = pygame.display.set_mode( (500, 500) ) # 创建一个窗口对象 设置参数以元组传入
while True:
pygame.display.update() # 不断重新刷新界面
for event in pygame.event.get(): # 从pygame的事件队列中获取事件对象
if event.type == pygame.QUIT: # pygame.QUIT是一个常量,数值为256,表示事件类型为退出pygame
pygame.quit() # pygame退出,和pygame.init()对应
sys.exit() # 如果系统在pygame.quit()前终止,IDLE会挂起,一般最后调用sys.exit()
界面如图:
2.基本图形的绘制
import pygame
import sys
pygame.init() # pygame 初始化
size = width, height = 300, 300
pygame.display.set_caption("图形绘制") # 窗口的名称
screen = pygame.display.set_mode(size) # 创建一个窗口对象 设置参数以元组传入
# 定义颜色变量
WHITE = pygame.color.Color(255, 255, 255) # 定义白色常量
BLACK = pygame.color.Color(0, 0, 0, a=255) # 定义黑色常量 alpha通道默认255,不透明
RED = "#FF0000" # 定义红色 十六进制
GREEN = "0x00FF00" # 定义绿色
BLUE = (0, 0, 255) # 定义蓝色 也可以是列表[0, 0, 255]
screen.fill(WHITE) # 窗口填充白色
while True:
# 画线 蓝色 起点(150,130) 终点(130,170)
pygame.draw.line(screen, BLUE, (150, 130), (130, 170))
# 画线 蓝色 起点(150,130) 终点(170,170)
pygame.draw.line(screen, BLUE, (150, 130), (170, 170))
# 画线 蓝色 起点(130,170) 终点(170,170)
pygame.draw.line(screen, GREEN, (130, 170), (170, 170))
# 画圆 黑色 圆心:(100,50) ,半径 30
pygame.draw.circle(screen, BLACK, (100, 50), 30)
# 画圆 黑色 圆心:(200,50) ,半径 30
pygame.draw.circle(screen, BLACK, (200, 50), 30)
# 画正方形 红色 左上方(100,200) 宽 100 高50 边框宽度为2的空心矩形
pygame.draw.rect(screen, RED, (100, 200, 100, 50), 2)
for event in pygame.event.get(): # 从pygame的事件队列中获取事件对象
if event.type == pygame.QUIT: # pygame.QUIT是一个常量,数值为256,表示事件类型为退出pygame
pygame.quit() # pygame退出,和pygame.init()对应
sys.exit() # 如果系统在pygame.quit()前终止,IDLE会挂起,一般最后调用sys.exit()
pygame.display.update() # 不断重新刷新界面
绘制图形:
3.实现小车的运动 方式一:
import pygame
import sys
pygame.init()
size = width, height = (400, 600)
pygame.display.set_caption("图像绘制")
screen = pygame.display.set_mode(size)
background = pygame.image.load("AnimatedStreet.png") # 将图片保持在内存中 绘制背景图面
player = pygame.image.load("Player.png")
x, y = 178, 504 # player的位置
FPS = 30 # 设置每秒刷新的次数 图像的帧数率
clock = pygame.time.Clock() # 返回一个时钟对象
while True:
screen.blit(background, (0, 0)) # 将图片渲染在指定的位置
screen.blit(player, (x, y))
y -= 1
for event in pygame.event.get(): # 从pygame的事件队列中获取事件对象
if event.type == pygame.QUIT: # pygame.QUIT是一个常量,数值为256,表示事件类型为退出pygame
pygame.quit() # pygame退出,和pygame.init()对应
sys.exit() # 如果系统在pygame.quit()前终止,IDLE会挂起,一般最后调用sys.exit()
pygame.display.update() # 不断重新刷新界面
clock.tick(FPS) # 按照指定的更新速率来属性界面,没到时间就让它循环等待
方式二:类的封装:
# -*- codeing = utf-8 -*-
# @Time : 2021/8/8 21:25
# @Author : chao
# @File : 图像运动-类封装.py
# @Software : PyCharm
import pygame
import sys
pygame.init()
size = width, height = (400, 600)
pygame.display.set_caption("图像绘制")
screen = pygame.display.set_mode(size)
# 对游戏角色封装
class Player():
def __init__(self):
x, y = (width/2, height/2) # 屏幕的中心距离
self.image = pygame.image.load("Player.png") # 将图片素材加载到内存
self.rect = self.image.get_rect(center = (x, y)) # 将rect对象的中心点,定位在(x,y)处
#self.rect = self.image.get_rect(top = 200, left = 200) # 默认是定位在(0,0),还可以结合其他rect的属性定位显示位置
def move(self):
#self.rect.y -= 1 # 直接修改rect对象的y坐标
#self.rect = self.rect.move(0, -1) # 使用 rect对象的move方法,设定移动增长量,返回移动后的rect对象
self.rect.move_ip(0, -2) # 直接对当前rect对象移动指定数值的位移 负数表示x向左,y向上
background = pygame.image.load("AnimatedStreet.png") # 将图片保持在内存中 绘制背景图面
FPS = 30 # 设置每秒刷新的次数 图像的帧数率
clock = pygame.time.Clock() # 返回一个时钟对象
player = Player() # 创建Player的对象,改变图像的所在的位置
while True:
screen.blit(background, (0, 0)) # 将图片渲染在指定的位置
screen.blit(player.image, player.rect) # 将player对象的image 渲染到player中指定的rect区域
player.move() # 不断的调用move()方法,
for event in pygame.event.get(): # 从pygame的事件队列中获取事件对象
if event.type == pygame.QUIT: # pygame.QUIT是一个常量,数值为256,表示事件类型为退出pygame
pygame.quit() # pygame退出,和pygame.init()对应
sys.exit() # 如果系统在pygame.quit()前终止,IDLE会挂起,一般最后调用sys.exit()
pygame.display.update() # 不断重新刷新界面
clock.tick(FPS) # 按照指定的更新速率来属性界面,没到时间就让它循环等待
图片展现:
4.事件处理 4.1 键盘处理:通过获取键盘列表,判断他们的状态,并执行相应的操作
# -*- codeing = utf-8 -*-
# @Time : 2021/8/9 14:07
# @Author : chao
# @File : 事件处理--键盘.py
# @Software : PyCharm
import pygame
import sys
from pygame.locals import*
pygame.init()
size = width, height = (400, 600)
pygame.display.set_caption("图像绘制")
screen = pygame.display.set_mode(size)
background = pygame.image.load("AnimatedStreet.png") # 将图片保持在内存中 绘制背景图面
FPS = 30 # 设置每秒刷新的次数 图像的帧数率
clock = pygame.time.Clock() # 返回一个时钟对象
# 对游戏角色封装
class Player():
def __init__(self):
x, y = (178, 504) # 屏幕的中心距离
self.image = pygame.image.load("Player.png") # 将图片素材加载到内存
self.rect = self.image.get_rect(center = (x, y)) # 将rect对象的中心点,定位在(x,y)处
#self.rect = self.image.get_rect(top = 200, left = 200) # 默认是定位在(0,0),还可以结合其他rect的属性定位显示位置
def move(self):
pressed_keys = pygame.key.get_pressed()
if pressed_keys[pygame.K_UP]:
self.rect.move_ip(0, -5)
if pressed_keys[pygame.K_DOWN]:
self.rect.move_ip(0, 5)
if pressed_keys[K_LEFT]:
self.rect.move_ip((-5), 0)
if pressed_keys[K_RIGHT]:
self.rect.move_ip(5, 0)
player = Player() # 创建Player的对象,改变图像的所在的位置
while True:
# 绘制图像
screen.blit(background, (0, 0)) # 将图片渲染在指定的位置
screen.blit(player.image, player.rect) # 将player对象的image 渲染到player中指定的rect区域
# 角色移动
player.move()
for event in pygame.event.get(): # 从pygame的事件队列中获取事件对象
if event.type == pygame.QUIT: # pygame.QUIT是一个常量,数值为256,表示事件类型为退出pygame
pygame.quit() # pygame退出,和pygame.init()对应
sys.exit() # 如果系统在pygame.quit()前终止,IDLE会挂起,一般最后调用sys.exit()
pygame.display.update() # 不断重新刷新界面
clock.tick(FPS) # 按照指定的更新速率来属性界面,没到时间就让它循环等待
4.2 鼠标处理 使用mouse对象获取鼠标的位置,并根据鼠标位置进行动作响应。可以通过rect对象的属性,控制鼠标在图片上的定位点。
# -*- codeing = utf-8 -*-
# @Time : 2021/8/9 14:07
# @Author : chao
# @File : 事件处理--键盘.py
# @Software : PyCharm
import pygame
import sys
from pygame.locals import*
pygame.init()
size = width, height = (400, 600)
pygame.display.set_caption("图像绘制")
screen = pygame.display.set_mode(size)
background = pygame.image.load("AnimatedStreet.png") # 将图片保持在内存中 绘制背景图面
FPS = 60 # 设置每秒刷新的次数 图像的帧数率
clock = pygame.time.Clock() # 返回一个时钟对象
# 对游戏角色封装
class Player():
def __init__(self):
x, y = (178, 504) # 屏幕的中心距离
self.image = pygame.image.load("Player.png") # 将图片素材加载到内存
self.rect = self.image.get_rect(center = (x, y)) # 将rect对象的中心点,定位在(x,y)处
#self.rect = self.image.get_rect(top = 200, left = 200) # 默认是定位在(0,0),还可以结合其他rect的属性定位显示位置
def move(self):
mouseX, mouseY = pygame.mouse.get_pos() # 获取鼠标的位置
# 小车不能超出边界
if player.rect.width/2
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?