我希望我的立方体在pygame中每秒每一帧的可重复性向前移动,但我不知道出了什么问题?



我认为这与移动是一个事件和我的函数有关"动量";,不在那里,这就是我试图让它反复移动的方式。我想知道我做错了什么,以及将来如何看待代码。我刚开始学习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)

您将xy传递给momentum_forward函数,因此函数中的更新不会更新全局xy值。

试试这个代码:

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)

相关内容

最新更新