收费网站空间,广告设计宣传画册,百度号码认证,如何登录百度站长平台3.2 move()方法的定义
Player类的move()方法用于玩家控制汽车左右移动#xff0c;当玩家点击键盘上的左右按键时#xff0c;汽车会相应地进行左右移动。
move()方法的代码如图7所示。 图7 move()方法的代码
其中#xff0c;第20行代码通过pygame.key.get_pressed()函数获…3.2 move()方法的定义
Player类的move()方法用于玩家控制汽车左右移动当玩家点击键盘上的左右按键时汽车会相应地进行左右移动。
move()方法的代码如图7所示。 图7 move()方法的代码
其中第20行代码通过pygame.key.get_pressed()函数获取键盘中所有按键的状态并将其保存在变量pressed_keys中当玩家按下了向左的按键pressed_keys[K_LEFT]的值是True当玩家按下了向右的按键pressed_keys[K_RIGHT]的值是True。第22-24行代码中首先判断玩家汽车的位置是否已经到了屏幕的最左端如果没有在屏幕最左端则第23行代码判断玩家是否按下了向左的按键如果该按键被按下则第24行代码将玩家汽车的位置向左移动5个单位。第22-24行代码保证了如果玩家汽车位于屏幕最左端此时不会再移动到屏幕之外。同理第25-27行代码是对用户按下了向右按键的处理第25行代码判断玩家汽车是否位于屏幕的最右端如果没有在最右端则第26行代码判断玩家是否按下了向右的按键如果该按键被按下则第27行代码将玩家汽车的位置向右移动5个单位。第25-27行代码保证了如果玩家汽车位于屏幕最右端此时不会再移动到屏幕之外。
相关链接5 Pygame的Rect类的资料请参考
《Pygame中Rect类的使用方法2-1》
《Pygame中Rect类的使用方法2-2》
相关链接6 Pygame的键盘监听资料请参考
《Pygame中监控键盘按键的方法》
4 实例化Player类及相关处理
4.1 实例化Player类
通过图8所示的代码实例化Player类。 图8 实例化Player类的代码
其中 P1是Player类的实例。
4.2 将P1加入到精灵组中
P1是Player类的实例而Player类是pygame.sprite.Sprite类的子类因此P1可以看作是一个“精灵”。将“精灵”加入到“精灵组”可以方便对多个“精灵”进行批量处理。代码如图9所示。 图9 将P1加入到精灵组的代码
其中第29行通过pygame.sprite.Group()创建“精灵组”all_sprites该“精灵组”中将会包含游戏中的所有“精灵”即包含玩家也包含“敌人”。
4.3 显示及控制玩家汽车
在while True循环中通过“精灵组”all_sprites实现显示及控制玩家汽车的功能代码如图10所示。 图10 显示及控制玩家汽车的代码
其中第39行代码通过for循环遍历“精灵组”all_sprites中的所有精灵目前组里面只有玩家一个精灵之后第40行代码调用精灵的move()方法控制“精灵”的移动第41行代码绘制“精灵”。
运行代码后游戏的效果如图11所示。 图11 游戏效果
5 完整代码
以上内容的完整代码如下所示。
import pygame
import os
from pygame.locals import *WIDTH 400
HEIGHT 600
pygame.init()
screen pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption(赛车游戏)background pygame.image.load(AnimatedStreet.png)class Player(pygame.sprite.Sprite):def __init__(self):super().__init__() self.image pygame.image.load(Player.png)self.rect self.image.get_rect()self.rect.center (160, 520)def move(self):pressed_keys pygame.key.get_pressed()if self.rect.left 0:if pressed_keys[K_LEFT]:self.rect.move_ip(-5, 0)if self.rect.right WIDTH: if pressed_keys[K_RIGHT]:self.rect.move_ip(5, 0)
P1 Player()
all_sprites pygame.sprite.Group()
all_sprites.add(P1)while True:for event in pygame.event.get():if event.type QUIT:pygame.quit()os.sys.exit()screen.blit(background, (0,0))for entity in all_sprites:entity.move()screen.blit(entity.image, entity.rect)pygame.display.update()