9.pygame-键盘捕获
2024-10-19 22:24:20
创建英雄类
"""英雄精灵"""
class Hero(GameSprite):
def __init__(self):
# 调用父类方法,设置image
super().__init__('./images/me1.png', 0)
# 设置英雄的初始位置
self.rect.centerx = SCREEN_RECT.centerx
self.rect.bottom = SCREEN_RECT.bottom - 120
# 私有方法-创建精灵、精灵组
def __create_sprites(self):
# 创建两个背景精灵加入精灵组,实现循环滚动
background_1 = Background()
background_2 = Background(True) # 设置True表示交替背景,设置位置
self.back_group = pygame.sprite.Group(background_1,background_2)
# 创建敌机精灵组
self.enemy_group = pygame.sprite.Group()
# 创建英雄精灵和精灵组
self.hero = Hero()
self.hero_group = pygame.sprite.Group(self.hero)
# 私有方法-更新精灵组
def __update_sprites(self):
self.back_group.update() # 更新背景精灵组所有精灵
self.back_group.draw(self.screen) # 绘制精灵组图像
self.enemy_group.update() # 更新敌机精灵组精灵
self.enemy_group.draw(self.screen)
self.hero_group.update()# 更新英雄精灵组
self.hero_group.draw(self.screen)
移动英雄位置
pygame中针对键盘按键的捕获,有两种方式
第一种方式判断event.type == pygame.KEYDOWN
第二种方式:
首先使用pygame.key.get_pressed()返回所有咱家元素
通过键盘常量,判断元组某一个键是否被按下,如果按下,对应数值为1
两种方法对比:
第一种方式必须抬起按键,才算一次按键事件
第二种方法可以按键不放,产生持续移动效果
#第一种方法判断是否按下按键并且按下的键是→方向键
elif event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT:
...
# 第二种方法获取键盘元组
kyes_pressed = pygame.key.get_pressed()
# 判断键盘元组→方向键是否为1
if kyes_pressed[pygame.K_RIGHT]:
..
控制英雄左右
class Hero(GameSprite):
def __init__(self):
# 调用父类方法,设置image
super().__init__('./images/me1.png', 0)
# 设置英雄的初始位置
self.rect.centerx = SCREEN_RECT.centerx
self.rect.bottom = SCREEN_RECT.bottom - 120
# 重写父类方法,实现左右移动
def update(self):
# 英雄在水平方向移动
self.rect.x += self.speed
# 控制不能离开屏幕
# 判断x 小于0 的时候,将x设为0
if self.rect.x < 0:
self.rect.x = 0
# right = x + 窗口宽度 = 右侧
elif self.rect.right > SCREEN_RECT.right:
self.rect.right = SCREEN_RECT.right
#事件监听
# 获取键盘元组
kyes_pressed = pygame.key.get_pressed()
# 判断键盘元组→方向键是否为1
if kyes_pressed[pygame.K_RIGHT]:
self.hero.speed = 2
#判断键盘元组←方向键是否为1
elif kyes_pressed[pygame.K_LEFT]:
self.hero.speed = -2
else:
self.hero.speed = 0
最新文章
- T-SQL 比较N个指段取其中最大值
- ReportViewer内存泄漏问题解决方案[上]
- CodeBlock
- Python关键字参数
- 【mysql】关于IO/内存方面的一些优化
- 2016-2017 CT S03E05: Codeforces Trainings Season 3 Episode 5 (2016 Stanford Local Programming Contest, Extended) I
- nginx的健康检查功能将挂掉的Tomcat舍弃
- CentOS(三)--初识linux的文件系统以及用户组等概念
- hdu3038(并查集)
- java正则表达式总结
- 谷歌浏览器插件-jsonView插件安装与使用
- mysql进阶(十三)命令行导出导入数据库
- vue学习记录①(vue-cli脚手架构建项目结构)
- vue--模板语法
- Unity3D InputManager详解
- StringBuilder与String有哪些区别?
- Django复习2
- GIL学习
- [macOS] Cannot find libz when install php56
- Jersey RESTful WebService框架学习(八)文件下载防乱码