我正在製作一個簡單的自上而下的遊戲,使用pygame在玩家和牆壁之間移動和碰撞。pygame - 如何更改正在使用的變量?
我做了我的代碼,這樣,當keys[pygame.K_LSHIFT]
是pygame.key.get_pressed
在鍵盤的狀態下True
當它被稱爲,block_speed
變化的5而不是3。因此它的工作原理,當我按住Shift並在鍵盤上的WASD鍵移動同時我的速度變爲5.
現在,問題是當我放開SHIFT的同時還在移動時,我的速度不會回到3,而是停留在5.但是如果我停止移動,然後移動,block_speed
按預期回到3。看起來好像對block_speed
的任何改變只發生在我停止移動然後再次移動時。
我猜它只接收block_speed
的新值block_speed
當前副本完成使用後。
當程序正在使用此變量時,如何使用SHIFT更改block_speed
?
def run(self):
pygame.init()
pygame.display.set_caption("Platformer v1")
block_speed = 3
sprite_list = pygame.sprite.Group()
wall_list = pygame.sprite.Group()
left_wall = Wall(0,0,10,resolution[1])
wall_list.add(left_wall)
sprite_list.add(left_wall)
top_wall = Wall(10,0,resolution[0]-10,10)
wall_list.add(top_wall)
sprite_list.add(top_wall)
test_wall = Wall(10,150,200,10)
wall_list.add(test_wall)
sprite_list.add(test_wall)
player = Player(50,50)
player.walls = wall_list
sprite_list.add(player)
while True:
self.screen.fill(black)
keys = pygame.key.get_pressed()
for event in pygame.event.get():
if event.type == pygame.QUIT:
return False
if keys[pygame.K_LSHIFT]:
block_speed = 5
else:
block_speed = 3
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_d:
player.change_x += block_speed
elif event.key == pygame.K_a:
player.change_x += -block_speed
elif event.key == pygame.K_w:
player.change_y += -block_speed
elif event.key == pygame.K_s:
player.change_y += block_speed
elif event.type == pygame.KEYUP:
if event.key == pygame.K_d or event.key == pygame.K_a:
player.change_x = 0
elif event.key == pygame.K_w or event.key == pygame.K_s:
player.change_y = 0
sprite_list.update()
sprite_list.draw(self.screen)
pygame.display.update()
self.clock.tick(FPS)
不幸的是,block_speed仍然沒有改變,我猜「等待」,無論「player.change_x + = block_speed」在應用我的SHIFT變化之前完成 – martinpkmn
我也有一個函數在這個代碼中執行這個代碼self.rect .x + = self。change_x'如果有幫助 – martinpkmn
代碼中必須有其他內容,因爲語句按順序執行,所以將塊速度改變爲高於塊速度的使用率將意味着使用新值。 –