很合适新手入门使用的Python游戏开发包pygame实例教程-02[如何控制飞行]

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


文章原出处: 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

猜你喜欢

转载自blog.csdn.net/haigear/article/details/130189762