> 文章列表 > 新手使用Python开发游戏pygame入门很合适-02

新手使用Python开发游戏pygame入门很合适-02

新手使用Python开发游戏pygame入门很合适-02

前面一篇博文,我们让飞机动起来了,但不是那么完美,我们继续来完善我们的游戏代码,本篇博文主要介绍获取按键的方式已经飞行速度的控制。

文章目录

  • 一、获取按键的三种方式
    • 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]:#leftaircraft_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=Falsescreen.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]:#leftif aircraft_local.x>0:aircraft_local=aircraft_local.move(-1, 0)if presskey[pygame.K_d]or presskey[pygame.K_RIGHT]:#rightif aircraft_local.x<width-80:aircraft_local=aircraft_local.move(1, 0)if presskey[pygame.K_s]or presskey[pygame.K_DOWN]:#downif aircraft_local.y<height-80:aircraft_local.y+=1if presskey[pygame.K_w]or presskey[pygame.K_UP]:#upif 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 timesize=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=Falsepresskey=pygame.key.get_pressed()if presskey[pygame.K_a] or presskey[pygame.K_LEFT]:#leftif aircraft_local.x>0:aircraft_local=aircraft_local.move(-1, 0)if presskey[pygame.K_d]or presskey[pygame.K_RIGHT]:#rightif aircraft_local.x<width-80:aircraft_local=aircraft_local.move(1, 0)if presskey[pygame.K_s]or presskey[pygame.K_DOWN]:#downif aircraft_local.y<height-80:aircraft_local.y+=1if presskey[pygame.K_w]or presskey[pygame.K_UP]:#upif 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=0screen.blit(bg,(0,0))screen.blit(aircraft,aircraft_local)screen.blit(plane,plane_local)pygame.display.update()clock.tick(60)

有关blit()函数的参考博文
上面的代码主要是对前面第一篇的代码进行了一些完善,下一篇博文,我们则开始对飞机及敌机进行类的设计和封装。