我认为这与移动是一个事件的事实有关,而我的函数“动量”并不在那里,这就是我试图让它反复移动的方式。我想知道我做错了什么,以及将来如何思考这样的代码。我刚刚开始学习pygame,这实际上是我使用它的第一个项目。我也已经写了一年的代码(上个月),我真的很喜欢编程。
import pygame
pygame.init()
running = True
x = 0
y = 0
momentum = "null"
def draw_rect(x, y, size, size1):
pygame.draw.rect(screen, (204, 65, 242), (x, y, size, size1))
def momentum_forward(x, y):
if momentum == "a":
x += -25
if momentum == "d":
x += 25
if momentum == "w":
y += -25
if momentum == "s":
y += 25
while running:
FPS = 8
fpsClock = pygame.time.Clock()
screen = pygame.display.set_mode((600, 480), 0, 32)
draw_rect(x, y, 25, 25)
momentum_forward(x, y)
print(momentum)
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
x += -25
momentum = "a"
if event.key == pygame.K_d:
x += 25
momentum = "d"
if event.key == pygame.K_w:
y += -25
momentum = "w"
if event.key == pygame.K_s:
y += 25
momentum = "s"
if event.type == pygame.QUIT:
running = False
pygame.display.update()
fpsClock.tick(FPS)发布于 2020-10-11 11:07:39
您将x和y传递给momentum_forward函数,因此函数中的更新不会更新全局的x和y值。
尝试以下代码:
import pygame
pygame.init()
running = True
x = 0
y = 0
momentum = None # null in python
def draw_rect(x, y, size, size1):
pygame.draw.rect(screen, (204, 65, 242), (x, y, size, size1))
def momentum_forward():
global x,y # use global variables
if momentum == "a":
x += -25
if momentum == "d":
x += 25
if momentum == "w":
y += -25
if momentum == "s":
y += 25
screen = pygame.display.set_mode((600, 480), 0, 32) # only need this once
fpsClock = pygame.time.Clock()
while running:
FPS = 8
momentum_forward() # don't pass x,y
# print(momentum)
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
x += -25
momentum = "a"
if event.key == pygame.K_d:
x += 25
momentum = "d"
if event.key == pygame.K_w:
y += -25
momentum = "w"
if event.key == pygame.K_s:
y += 25
momentum = "s"
if event.type == pygame.QUIT:
running = False
draw_rect(x, y, 25, 25)
pygame.display.update()
fpsClock.tick(FPS)https://stackoverflow.com/questions/64300027
复制相似问题