URLhttps://learnscript.net/zh/pygame/sprite/movement/
    复制链接转到说明  示例

    控制精灵移动的两种方式

    我被代码海扁署名-非商业-禁演绎
    阅读 3:23·字数 1019·更新 

    引言

    在游戏开发中,角色移动是最基础也最重要的功能之一。本文将介绍在 Python Pygame 中实现角色移动的两种主要方式:通过实时获取设备状态,然后移动角色;通过事件获取设备状态,然后移动角色。

    角色移动的基本原理

    在大多数游戏中,玩家需要通过输入设备(如键盘、鼠标或游戏控制器)来控制游戏角色的移动。在 Pygame 中实现这一功能通常分为两个步骤:获取输入设备的状态(如键盘按键的按下状态);根据设备状态调整角色的位置。

    方式一:实时获取设备状态

    Pygame 提供了keymousejoystick模块,这些模块包含可以实时获取键盘、鼠标和控制器状态的函数。本文将以key模块为例进行演示,其实现步骤大致如下。

    假设已经定义了一个表示飞机的精灵类Plane,我们需要重写Plane类的update方法。在update方法中,使用key模块的get_pressed函数检测方向键的按下状态(当然,你可以指定其他的按键来移动角色),根据按键状态修改角色的位置。最后,在游戏主循环中调用飞机所在精灵组的update方法。

    下面的代码逻辑可能会出现方向键优先级的问题(上方向键和左方向键优先级更高)。为了解决这个问题,可以将if语句拆分为四个独立的条件判断,这样同时按下相反方向键时,角色会停止移动。

    def update(self):
    	keys = pygame.key.get_pressed()
    
    if keys[pygame.K_LEFT]: self.rect.x -= 1 elif keys[pygame.K_RIGHT]: self.rect.x += 1
    if keys[pygame.K_UP]: self.rect.y -= 1 elif keys[pygame.K_DOWN]: self.rect.y += 1

    方式二:通过事件获取设备状态

    Pygame 的event模块提供了事件处理功能,我们可以通过处理与设备状态有关的事件(如按键按下和释放)来实现角色移动,其实现步骤大致如下。

    依然假设已经定义了表示飞机的精灵类Plane,为其添加表示水平和垂直速度的变量speedxspeedy。修改Planeupdate方法,根据速度变量更新位置。在游戏循环中处理键盘事件,修改飞机对象的speedxspeedy变量。

    在游戏循环中,需要处理与按键相关的事件,当按键按下时设置速度,当按键释放时重置速度为0。重置速度需要检查当前速度方向,避免错误地停止移动。

    def update(self):
    	self.rect.x += self.speedx
    	self.rect.y += self.speedy
    for event in pygame.event.get():
    	if event.type == pygame.KEYDOWN:
    		if event.key == pygame.K_LEFT:
    			plane.speedx = -1
    		elif event.key == pygame.K_RIGHT:
    			plane.speedx = 1
    		elif event.key == pygame.K_UP:
    			plane.speedy = -1
    		elif event.key == pygame.K_DOWN:
    			plane.speedy = 1
    	
    	if event.type == pygame.KEYUP:
    		if event.key == pygame.K_LEFT and plane.speedx < 0:
    			plane.speedx = 0
    		elif event.key == pygame.K_RIGHT and plane.speedx > 0:
    			plane.speedx = 0
    		elif event.key == pygame.K_UP and plane.speedy < 0:
    			plane.speedy = 0
    		elif event.key == pygame.K_DOWN and plane.speedy > 0:
    			plane.speedy = 0

    讲解视频

    如何在 Pygame 中控制角色移动·YouTube如何在 Pygame 中控制角色移动·Bilibili