教你如何在Pygame 中移动你的游戏角色
作者:海拥✘ 发布时间:2022-03-29 10:04:29
Pygame是一组跨平台的 Python 模块,专为编写视频游戏而设计。它包括旨在与 Python 编程语言一起使用的计算机图形和声音库。您可以使用 pygame 创建不同类型的游戏,包括街机游戏、平台游戏等等。
使用的图像:
你可以控制玩家的移动。为此,首先使用 pygame 的 display.set_mode() 方法创建一个显示对象,并使用 pygame 的 image.load() 方法添加玩家的精灵。set_mode() 函数用于初始化显示表面或窗口。size 参数是一对代表宽度和高度的数字。flags 参数是附加选项的集合。depth 参数表示用于颜色的位数。
语法:
set_mode(size=(0, 0), flags=0, depth=0, display=0, vsync=0)
创建一个变量来存储玩家的速度。设置玩家的初始坐标。现在,根据键盘事件(即键状态改变时发生的事件)更改播放器的 x 和 y 坐标。
blit(surface,surfacerect) 函数用于在屏幕上绘制图像。
语法:
blit(surface, surfacerect)
为了从队列中收集所有事件,使用事件模块的 get() 函数,然后我们使用 for 循环迭代所有事件。
语法:
get(eventtype=None)
使用显示模块的 update() 函数更新屏幕。
语法:
update(rectangle=None)
下面是实现
示例:玩家移动程序
# 导入 pygame 模块
import pygame
from pygame.locals import *
# 启动 pygame 并授予使用 pygame 功能的权限
pygame.init()
# 创建特定尺寸的显示面对象
window = pygame.display.set_mode((600, 600))
# 在窗口中添加标题
pygame.display.set_caption('Player Movement')
# 添加玩家精灵
image = pygame.image.load(r'haiyong.png')
# 将玩家的初始坐标存储在两个变量中,即 x 和 y
x = 100
y = 100
# 创建一个变量来存储玩家移动的速度
velocity = 12
# 创建无限循环
run = True
while run:
# 用白色填充背景
window.fill((255, 255, 255))
# 在 x 和 y 坐标处显示玩家精灵
window.blit(image, (x, y))
# 迭代 pygame.event.get() 方法返回的 Event 对象列表。
for event in pygame.event.get():
# 如果事件类型为 QUIT,则关闭窗口和程序
if event.type == pygame.QUIT:
run = False
pygame.quit()
quit()
# 如果事件类型为 KEYDOWN,即按下键盘按钮,则检查事件键
if event.type == pygame.KEYDOWN:
# 如果按下的按钮是左箭头键,则减小 x 坐标
if event.key == pygame.K_LEFT:
x -= velocity
# 如果按下的按钮是右箭头键,则增加 x 坐标
if event.key == pygame.K_RIGHT:
x += velocity
# 如果按下按钮是向上箭头键,则减小 y 坐标
if event.key == pygame.K_UP:
y -= velocity
# 如果按下按钮是向下箭头键,则增加 y 坐标
if event.key == pygame.K_DOWN:
y += velocity
# 将表面对象绘制到屏幕上
pygame.display.update()
输出:
玩家也可以连续移动。为此,除了要进行一些更改外,其他一切都保持不变。在这里,我们创建了一个新的时钟对象来使用 clock() 控制游戏的帧速率。
语法
Clock()
创建一个新变量(名为 key_pressed_is)来存储用户按下的键。为此,我们使用 key 模块的 get_pressed() 函数。
语法
get_pressed()
它返回一个布尔值序列,表示键盘上每个键的状态。
示例:连续移动玩家
# 导入 pygame 模块
import pygame
from pygame.locals import *
# 启动 pygame 并授予使用 pygame 功能的权限
pygame.init()
# 创建特定尺寸的显示面对象
window = pygame.display.set_mode((600, 600))
# 在窗口中添加标题
pygame.display.set_caption('玩家移动')
# 初始化时钟 时钟用于跟踪和控制游戏的帧速率
clock = pygame.time.Clock()
# 添加玩家精灵
image = pygame.image.load(r'haiyong.png')
# 将玩家的初始坐标存储在两个变量中,即 x 和 y
x = 100
y = 100
# 创建一个变量来存储玩家移动的速度
velocity = 12
# 创建无限循环
run = True
while run:
# 将帧速率设置为 60 fps
clock.tick(60)
# 用白色填充背景
window.fill((255, 255, 255))
# 在 x 和 y 坐标处显示玩家精灵
window.blit(image, (x, y))
# 迭代 pygame.event.get() 方法返回的 Event 对象列表。
for event in pygame.event.get():
# 如果事件类型为 QUIT,则关闭窗口和程序
if event.type == pygame.QUIT:
run = False
pygame.quit()
quit()
# 使用 key.get_pressed() 方法将按下的键存储在新变量中
key_pressed_is = pygame.key.get_pressed()
# 改变玩家坐标
if key_pressed_is[K_LEFT]:
x -= 8
if key_pressed_is[K_RIGHT]:
x += 8
if key_pressed_is[K_UP]:
y -= 8
if key_pressed_is[K_DOWN]:
y += 8
# 将表面对象绘制到屏幕上
pygame.display.update()
输出:
翻转玩家精灵
您可以使用 pygame 的转换模块的 flip() 函数轻松翻转任何精灵。例如,如果我们想在玩家改变移动方向时翻转精灵,那么我们可以使用下面的代码
window.blit(pygame.transform.flip(image, False, True), (x,y))
flip() 函数用于水平、垂直翻转表面对象。 或两者。 这个函数有三个参数:
要翻转的图像
进行水平翻转的布尔值
进行垂直翻转的布尔值
下面是实现。
示例:翻转播放器图像
输出:
我们还可以通过创建精灵列表轻松更新玩家精灵。
image = [pygame.image.load(r'haiyong.png'),
pygame.image.load(r'haiyong2.png')]
示例:更新精灵
# 导入 pygame 模块
import pygame
from pygame.locals import *
# 启动 pygame 并授予使用 pygame 功能的权限
pygame.init()
# 创建特定尺寸的显示面对象
window = pygame.display.set_mode((600, 600))
# 在窗口中添加标题
pygame.display.set_caption('玩家切换')
# 初始化时钟 时钟用于跟踪和控制游戏的帧速率
clock = pygame.time.Clock()
# 创建一个变量来检查运动方向
# 每当玩家改变方向时,我们就会改变它的值
direction = True
# 在列表中添加玩家精灵
image = [pygame.image.load(r'haiyong.png'),
pygame.image.load(r'haiyong2.png')]
# 将玩家的初始坐标存储在两个变量中,即 x 和 y
x = 100
y = 100
# 创建一个变量来存储玩家移动的速度
velocity = 12
# 创建无限循环
run = True
while run:
# 将帧速率设置为 60 fps
clock.tick(60)
# 用浅灰蓝色填充背景
window.fill((176, 224, 230))
# 在 x 和 y 坐标处显示玩家精灵
# 如果玩家改变方向,则改变玩家精灵
if direction == True:
window.blit(image[0], (x, y))
if direction == False:
window.blit(image[1], (x, y))
# 迭代 pygame.event.get() 方法返回的 Event 对象列表。
for event in pygame.event.get():
# 如果事件类型为 QUIT,则关闭窗口和程序
if event.type == pygame.QUIT:
run = False
pygame.quit()
quit()
# 改变方向变量的值
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
direction = True
elif event.key == pygame.K_LEFT:
direction = False
# 使用 key.get_pressed() 方法将按下的键存储在新变量中
key_pressed_is = pygame.key.get_pressed()
# 改变玩家坐标
if key_pressed_is[K_LEFT]:
x -= 5
if key_pressed_is[K_RIGHT]:
x += 5
if key_pressed_is[K_UP]:
y -= 5
if key_pressed_is[K_DOWN]:
y += 5
# 将表面对象绘制到屏幕上
pygame.display.update()
换张图试试
来源:https://blog.csdn.net/qq_44273429/article/details/120157888


猜你喜欢
- 给明文密码加密的流程:import base64pwd_after_encrypt = base64.b64encode(b'thi
- --为空的值text ntext select * from lf_newsNg_utf where datalength(newsCont
- CentOS7安装mysql笔记1 CentOS7默认安装mariadb数据库,卸载mariadb。rpm -qa|grep mariadb
- Python Thread类表示在单独的控制线程中运行的活动。有两种方法可以指定这种活动:1、给构造函数传递回调对象mthread=thre
- 一、常用函数:APP_NAME: 返回当前会话的应用程序名称(如果应用程序进行了设置)。SELECT APP_NAME()COALESCE:
- 相关文章推荐:各种loading加载图标下载 gif格式loadinfo和ajaxload一样,也是一个在线Ajax载入动画生成工
- 目录实践步骤完整代码参考实践步骤1.寻找合适的Python库(安装是否麻烦、使用是否简便、执行会不会太久)moviepy 音视频库。分析需要
- 本篇,我们学习PyQt5界面中拖放(Drag 和Drop)控件。拖放动作在GUI中,拖放指的是点击一个对象,并将其拖动到另一个对象上的动作。
- /************************************************************ * Code
- 概述你可能在JavaScript项目中都用了console.log。这是一种查看变量的值或程序运行中发生的事情的便捷方法。但是JavaScr
- 1. 下载darknet源码在命令窗口(terminal)中进入你想存放darknet源码的路径,然后在该路径下输入依次输入以下命令:git
- 装饰器基本概念大家都知道装饰器是一个很著名的设计模式,经常被用于 AOP (面向切面编程)的场景,较为经典的有插入日志,性能测试,事务处理,
- 本文实例讲述了MySQL数据库优化之索引实现原理与用法。分享给大家供大家参考,具体如下:索引什么是索引索引用来快速地寻找那些具有特定值的记录
- python永久添加搜索路径_Python sys.path永久添加在用户目录下,找到隐藏文件.bashrc 文件然后在末尾添加export
- 1.event.srcElement //srcElement只能在IE下使用target是FireFox使用的,下面是兼容性写法 var
- 本文实例讲述了python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据。分享给大家供大家参考,具体如下:# -*- c
- Jupyter 是数据分析领域非常有名的开发环境,使用 Jupyter 写数据分析相关的代码会大大节约开发时间。设想这样一个场景:别的部门的
- PHP观察者模式(Observer Pattern)观察者模式是一种行为设计模式,它定义了一种订阅机制,让一个或多个对象(观察者)自动被通知
- 概览最近开始在学习mysql相关知识,自己根据学到的知识点,根据自己的理解整理分享出来,本篇文章会分析下一个sql语句在mysql中的执行流
- 支持向量机可以用来拟合线性回归。 相同的最大间隔(maximum margin)的概念应用到线性回归拟合。代替最大化分割两类目标是,最大化分