前面一篇博文,我们让飞机动起来了,但不是那么完美,我们继续来完善我们的游戏代码,本篇博文主要介绍获取按键的方式已经飞行速度的控制。
文章目录
- 一、获取按键的三种方式
- 1、通过event.get配合pygame.key枚举
- 2、通过event.get配合ord
- 二、完善飞行
- 1、飞机飞行的速度
- 2、飞行的边界
- 2、移动的两种方式
- (1)通过坐标属性
- (2)通过move方法
- 三、来一架敌机吧
一、获取按键的三种方式
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
2、移动的两种方式
(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()函数的参考博文
上面的代码主要是对前面第一篇的代码进行了一些完善,下一篇博文,我们则开始对飞机及敌机进行类的设计和封装。