很合适新手入门使用的Python游戏开发包pygame实例教程-02[如何控制飞行]
2023-09-27 14:27:33 时间
前面一篇博文,我们让飞机动起来了,但不是那么完美,我们继续来完善我们的游戏代码,本篇博文主要介绍获取按键的方式已经飞行的控制。
文章目录
文章原出处: https://haigear.blog.csdn.net/article/details/130189762
一、获取按键的三种方式
1、通过event.get配合pygame.key枚举
for event in pygame.event.get():
if event.type==KEYDOWN:
if event.key==pygame.K_RIGHT:
aircraft_local=aircraft_local.move(1, 0)
2、通过event.get配合ord
for event in pygame.event.get():
if event.type==KEYDOWN:
if event.key == ord('q'):
pygame.quit()
3、通过pygame的get_pressed方法
presskey=pygame.key.get_pressed()
if presskey[pygame.K_a] or presskey[pygame.K_LEFT]:#left
aircraft_local=aircraft_local.move(-1, 0)
二、完善飞行
1、飞机飞行的速度
这里我们引入time包,利用它来控制好。前面那篇的代码飞行速度过快,所以,我们这里引入time的tick进行控制,这样,我们的运行速度,更准确的说是画面的更新速度就会自动根据tick中的速度来更新了。代码如下:
pygame.init()
screen=pygame.display.set_mode(size)
aircraft_local=aircraft.get_rect(x=100,y=200)
clock=pygame.time.Clock()
pygame.display.set_caption("firstPygame Window")
while runing:
for event in pygame.event.get():
if event.type==QUIT :
runing=False
screen.fill((200,100,0))
screen.blit(bg,(0,0))
screen.blit(aircraft,aircraft_local)
# 这里省去了按键移动的代码
pygame.display.update()
clock.tick(60)
2、飞行的边界
这里,我们又增加了一层判断,即对x和y的边界进行判断,这样我们的飞机就不至于跑出屏幕外了。
presskey=pygame.key.get_pressed()
if presskey[pygame.K_a] or presskey[pygame.K_LEFT]:#left
if aircraft_local.x>0:
aircraft_local=aircraft_local.move(-1, 0)
if presskey[pygame.K_d]or presskey[pygame.K_RIGHT]:#right
if aircraft_local.x<width-80:
aircraft_local=aircraft_local.move(1, 0)
if presskey[pygame.K_s]or presskey[pygame.K_DOWN]:#down
if aircraft_local.y<height-80:
aircraft_local.y+=1
if presskey[pygame.K_w]or presskey[pygame.K_UP]:#up
if aircraft_local.y>0:
aircraft_local.y-=1
3、移动的两种方式
(1)通过坐标属性
aircraft_local.y+=1
或者,如果你习惯下面这样写也可
aircraft_local.=aircraft_local.y+1
(2)通过move方法
aircraft_local=aircraft_local.move(-1, 0)
三、来一架敌机吧
假定我们也和加载飞机一样,加载了一架敌机的图片,下面我们就使用move方法,让飞机从上飞到底下。
# 前面加载plane的图片省略
while runing:
if plane_local.y<=height-40 :
plane_local=plane_local.move(0,1)
if plane_local.y==height-40:
plane_local.y=0
screen.blit(bg,(0,0))
screen.blit(aircraft,aircraft_local)
screen.blit(plane,plane_local)
pygame.display.update()
clock.tick(60)
效果如下图:
完全代码如下:
import pygame
from pygame.locals import *
import os
import time
size=width,height=(400,600)
# 加载图片
aircraft=pygame.transform.scale(pygame.image.load(os.path.join("assets","aircraft.png")),(80,80))
plane=pygame.transform.rotate(pygame.transform.scale(pygame.image.load(os.path.join("assets","plane01.png")),(40,40)),-90)
bg=pygame.transform.scale(pygame.image.load(os.path.join("assets","bg.jpg")),(width,height))
runing=True
step=width/200;
pygame.init()
screen=pygame.display.set_mode(size)
aircraft_local=aircraft.get_rect(x=100,y=200)
plane_local=aircraft.get_rect(x=180,y=0)
clock=pygame.time.Clock()
pygame.display.set_caption("firstPygame Window")
screen.fill((200,100,0))
while runing:
for event in pygame.event.get():
if event.type==QUIT :
runing=False
presskey=pygame.key.get_pressed()
if presskey[pygame.K_a] or presskey[pygame.K_LEFT]:#left
if aircraft_local.x>0:
aircraft_local=aircraft_local.move(-1, 0)
if presskey[pygame.K_d]or presskey[pygame.K_RIGHT]:#right
if aircraft_local.x<width-80:
aircraft_local=aircraft_local.move(1, 0)
if presskey[pygame.K_s]or presskey[pygame.K_DOWN]:#down
if aircraft_local.y<height-80:
aircraft_local.y+=1
if presskey[pygame.K_w]or presskey[pygame.K_UP]:#up
if aircraft_local.y>0:
aircraft_local.y-=1
if plane_local.y<=height-40 :
plane_local=plane_local.move(0,1)
if plane_local.y==height-40:
plane_local.y=0
screen.blit(bg,(0,0))
screen.blit(aircraft,aircraft_local)
screen.blit(plane,plane_local)
pygame.display.update()
clock.tick(60)
有关blit()函数的参考博文
上面的代码主要是对前面第一篇的代码进行了一些完善,下一篇博文,我们则开始对飞机及敌机进行类的设计和封装。
转载请注明出处:https://haigear.blog.csdn.net/article/details/130189762
相关文章
- Python实践 制作石头剪刀布游戏 带GUI界面
- Python图像处理丨如何调用OpenCV绘制直方图
- python之函数参数为*
- python游戏开发:pygame中的IO、数据
- Python中防止sql注入的方法详解
- Pyspider框架 —— Python爬虫实战之爬取 V2EX 网站帖子
- 第54天:Python 多线程 Event
- 使用Python开发游戏可以吗?
- Python实现生命的游戏
- Spark之导出PMML文件(Python)
- Python入门之logging日志模块以及多进程日志
- Python中写一个乒乓球类的游戏
- Python游戏编程快速上手(第4版)
- Python游戏开发入门2 壁球小游戏与图像的基本使用
- Python游戏开发入门1 Pygame最小开发框架
- webdriver(python) 学习笔记三
- python mysql Connect Pool mysql连接池 (201
- 成功解决:Can‘t find Python executable “python“, you can set the PYTHON env variable.
- shell脚本调用python脚本的路径问题
- windows下多Python环境指定pip安装模块到对应Python环境下
- 随想录(python编写的计算器和贪吃蛇游戏)
- python (5分钟实现一个游戏的屏蔽敏感字系统,)
- Python pandas.DataFrame.agg函数方法的使用
- 自学两个月Python可以开始赚钱吗?
- 580页python全案例入门资料,边学边练,技能速成必备!
- 整理了6个Python经典项目(python爬虫、python人工智能、python数据分析、python web、python办公自动化、python游戏),送给正在求职的你
- python - 进程池 multiprocessing.Pool的简单使用
- python - 验证字符串密码是否符合要求
- Eclipse和PyDev搭建完美Python开发环境(Windows篇)