gpt4 book ai didi

python-3.x - PyGame 桨板不动

转载 作者:行者123 更新时间:2023-12-01 04:32:09 24 4
gpt4 key购买 nike

关键事件正在控制台上正常注册。此外,我的桨出现了,这表明我从另一个文件调用的桨类有效。但是,我希望我的桨在按下左箭头键或右箭头键时能够平滑移动,这样用户就不必重复单击。但是,使用我当前的代码,桨根本不动。我试过改变 if/else 语句的位置,改变位置无济于事。我在这里做错了什么?

主要游戏:

import pygame
from pygame.locals import *

from Config import Config
from Paddle import Paddle

pygame.init()

#--Display settings
pygame.display.set_caption(Config['game']['caption'])
game_display = pygame.display.set_mode((Config['game']['display_width'],
Config['game']['display_height']))
clock = pygame.time.Clock()
paddle= Paddle(game_display)

x_change = 0
pressed_left = False
pressed_right = False

def event_handler():
for event in pygame.event.get():
print (event)
if (event.type == QUIT) or (event.type == KEYDOWN and event.key ==
K_ESCAPE):
pygame.quit()
quit()

#To move the paddle to the left and right
if event.type == KEYDOWN:
if event.key == K_LEFT:
pressed_left = True
elif event.key== K_RIGHT:
pressed_right = True

#If the key is up
if event.type == KEYUP:
if event.key == K_LEFT:
pressed_left = False
x_change = 0
elif event.key == K_RIGHT:
pressed_right = False
x_change = 0

#--This changes the position
if pressed_left:
x_change = -5
if pressed_right:
x_change = 5

while True:
event_handler()
game_display.fill(Config['colors']['white'])
paddle.draw()
paddle.movement(x_change)

pygame.display.update()
clock.tick(Config['game']['fps'])

从我的 paddle.py 中包含 Paddle 类:
import pygame
from pygame.locals import *

from Config import Config

class Paddle:
def __init__(self, game_display):
self.x = (Config['game']['display_width'] * 0.45)
self.y = (Config['game']['display_height'] * 0.92)
self.game_display=game_display


def draw(self):
pygame.draw.rect(self.game_display, Config['colors']['red'],
[self.x, self.y, 40, 25])

def movement(self, x_change):
self.x += x_change

最佳答案

让我们看一个更简单的例子。试试运行这个程序。

pressed_left = False
def event_handler():
pressed_left = True

event_handler()

print(pressed_left)

虽然您希望程序打印 True ,它打印 False .这是由于变量作用域在 python 中的工作方式造成的。当您尝试修改函数中未在该函数本身中定义的变量时,python 会定义一个新变量,而不是查找全局变量。
所以, pressed_left = True线在 event_handler()只是创建一个新的 pressed_left仅存在于 event_handler 中的变量函数而不修改全局函数。

要解决这个问题,您需要在函数中将变量声明为全局变量。试试运行这个程序。
pressed_left = False
def event_handler():
global pressed_left
pressed_left = True

event_handler()

print(pressed_left)

关于python-3.x - PyGame 桨板不动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53311671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com