值被正确传递,但是选择语句不能正常工作
Values are being passed correctly however selection statements do not work properly
我最近一直在尝试编写一个涉及二进制到十六进制转换的快速游戏。我已经设置了代码的一些基本结构,但我偶然发现了一个问题:即使应该正确传递值,我在游戏入口点的选择语句也没有按预期工作
我试过的:
- 我通过在函数和语句之间添加打印语句来尝试 "debugging" 程序,例如:
if event.key == pygame.K_KP_ENTER:
print('enter')
print(key_value)
key_value = 1
print(key_value)
打印出来的值是正确的,用于游戏的while循环点:
while running:
if EventHandler.get_key_pressed() == 1:
print('1')
elif EventHandler.get_key_pressed() == 2:
print('2')
- 改变语句的条件,仍然得到相同的结果例如:
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_KP_ENTER:
print('enter')
key_value = 2
elif event.key == pygame.K_SPACE:
print('space')
key_value = 1
将 get_key_pressed() 函数更改为非静态函数,结果仍然相同。
回到基础 python 教程以确保我的缩进和 structuring/usage 选择语句是正确的。
根据我的观察,只有 while 循环之后的第一个 if 语句起作用,但是当我认为我的代码格式正确时,我不确定为什么会发生这种情况。
代码:
main.py
import pygame
from Include.src.event_handler import EventHandler
# other imports go here, not related to problem.
# Global Variables
running = True
# Object creations, not really related as well
game = Game() # initialise pygame, settings and assets
screen = game.get_screen() # get screen bounds/object
while running:
if EventHandler.get_key_pressed() == 1: # Issue here
print('1')
elif EventHandler.get_key_pressed() == 2:
print('2')
pygame.display.flip()
pygame.display.update()
event_handler.py
import pygame
class EventHandler:
@staticmethod
def get_key_pressed():
key_value = 0
for event in pygame.event.get():
if event.type == pygame.QUIT:
print('Thanks for debugging me or playing idk')
pygame.quit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_KP_ENTER:
print('enter')
key_value = 1
elif event.key == pygame.K_SPACE:
print('space')
key_value = 2
return key_value
预期输出
人按 space、space 并打印 2。
人按 enter,enter 并打印 1。
实际产量
Space按下,只输出space。
按下回车,同时回车,输出1。
非常感谢!
对于回顾此 post 的任何人,我找到了答案:
正如@jasonharper 所说,由于再次调用该函数,该值被抛出
while running:
e = EventHandler.get_key_pressed() # make it constant
if e == 1:
print('1')
elif e == 2:
print('2')
我最近一直在尝试编写一个涉及二进制到十六进制转换的快速游戏。我已经设置了代码的一些基本结构,但我偶然发现了一个问题:即使应该正确传递值,我在游戏入口点的选择语句也没有按预期工作
我试过的:
- 我通过在函数和语句之间添加打印语句来尝试 "debugging" 程序,例如:
if event.key == pygame.K_KP_ENTER:
print('enter')
print(key_value)
key_value = 1
print(key_value)
打印出来的值是正确的,用于游戏的while循环点:
while running:
if EventHandler.get_key_pressed() == 1:
print('1')
elif EventHandler.get_key_pressed() == 2:
print('2')
- 改变语句的条件,仍然得到相同的结果例如:
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_KP_ENTER:
print('enter')
key_value = 2
elif event.key == pygame.K_SPACE:
print('space')
key_value = 1
将 get_key_pressed() 函数更改为非静态函数,结果仍然相同。
回到基础 python 教程以确保我的缩进和 structuring/usage 选择语句是正确的。
根据我的观察,只有 while 循环之后的第一个 if 语句起作用,但是当我认为我的代码格式正确时,我不确定为什么会发生这种情况。
代码: main.py
import pygame
from Include.src.event_handler import EventHandler
# other imports go here, not related to problem.
# Global Variables
running = True
# Object creations, not really related as well
game = Game() # initialise pygame, settings and assets
screen = game.get_screen() # get screen bounds/object
while running:
if EventHandler.get_key_pressed() == 1: # Issue here
print('1')
elif EventHandler.get_key_pressed() == 2:
print('2')
pygame.display.flip()
pygame.display.update()
event_handler.py
import pygame
class EventHandler:
@staticmethod
def get_key_pressed():
key_value = 0
for event in pygame.event.get():
if event.type == pygame.QUIT:
print('Thanks for debugging me or playing idk')
pygame.quit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_KP_ENTER:
print('enter')
key_value = 1
elif event.key == pygame.K_SPACE:
print('space')
key_value = 2
return key_value
预期输出
人按 space、space 并打印 2。 人按 enter,enter 并打印 1。
实际产量
Space按下,只输出space。 按下回车,同时回车,输出1。
非常感谢!
对于回顾此 post 的任何人,我找到了答案:
正如@jasonharper 所说,由于再次调用该函数,该值被抛出
while running:
e = EventHandler.get_key_pressed() # make it constant
if e == 1:
print('1')
elif e == 2:
print('2')