当前位置: 首页 > 面试题库 >

当我按下一个键时,pygame内部发生了什么?何时使用pygame.event == KEYDOWN

萧琛
2023-03-14
问题内容

我一直在尝试使用python编写小型2D游戏的代码。

checkp_list[0]=head_pos

pressed_key= pygame.key.get_pressed()

if pressed_key[pygame.K_ESCAPE]:
    running=False

if pressed_key[pygame.K_UP]:
    if dir_ not in ["up", "down"]:
        dir_= "up"
        checkp_no= checkp_no+1
        #head_pos_next=head_move(head_pos, dir_)
        checkp_list.insert(checkp_no,head_pos)
        log_file_obj.write("chekp_list {}, checkp_no {} after append dir {}\n".format(checkp_list,checkp_no,dir_))

if pressed_key[pygame.K_DOWN]:
    if dir_ not in ["up", "down"]:
        dir_= "down"
        checkp_no= checkp_no+1
        #head_pos_next = head_move(head_pos, dir_)
        checkp_list.insert(checkp_no,head_pos)
        log_file_obj.write("chekp_list {}, checkp_no {} after append dir {}\n".format(checkp_list,checkp_no,dir_))


if pressed_key[pygame.K_RIGHT]:
    if dir_ not in ["left", "right"]:
        dir_= "right"
        checkp_no= checkp_no+1
        #head_pos_next = head_move(head_pos, dir_)
        checkp_list.insert(checkp_no,head_pos)
        log_file_obj.write("chekp_list {}, checkp_no {} after append dir {}\n".format(checkp_list,checkp_no,dir_))

if pressed_key[pygame.K_LEFT]:
    if dir_ not in ["left", "right"]:
        dir_= "left"
        checkp_no= checkp_no+1
        #head_pos_next = head_move(head_pos, dir_)
        checkp_list.insert(checkp_no,head_pos)
        log_file_obj.write("chekp_list {}, checkp_no {} after append dir {}\n".format(checkp_list,checkp_no,dir_))

所有这些都在while True:循环内运行。基本上,每按一次箭头键,方向指示器dir_就会更改,它将在检查点编号上加1checkp_no并将当前head_pos对象的当前头部位置(在checkp_no索引位置插入该头部对象。)但是,不幸的是,所有这些checkp_list点都是最新的head_pos。该列表checkp_list是实现我的逻辑的重要因素。

chekp_list在start时[[325, 791], [325, 791], [325, 791]],这是checkp_listwhencheckp_no是2,whenwhile循环正在开始另一个迭代(取自创建的日志文件)。所有checkp_list要附加的点都在上面。请帮助我确定问题。


问题答案:

pygame.key.get_pressed()返回包含键当前状态的列表。按住某个键时,该键的状态为True,否则为False。使用pygame.key.get_pressed()评估是否一个键被连续按下。

while True:

    pressed_key= pygame.key.get_pressed()
    if pressed_key[pygame.K_UP]:
        # the code in this condition is executed as long UP is hold down 
        # [...]

当键的状态更改时,键盘事件(请参阅pygame.event模块)仅发生一次。KEYDOWN每次按下一个键,事件就会发生一次。KEYUP每次释放钥匙时发生一次。

while True:

    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                # The following code is executed once, every time when ESC is pressed.
                # [...]

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_ESCAPE:
                # The following code is executed once, every time when ESC is released.
                # [...]


 类似资料:
  • 之后我添加工具:替换="android: appComponentFactory在我的Manifest.xml它使发生错误 我只是按照日志给我的建议去做 我已经尝试了从这里开始的所有操作,Android X:tools:replace在第:行为属性指定,但没有指定新值 它向我展示了错误 这是我的Logcat 这是我的舱单

  • 如果我按下呼叫按钮,我会得到一个错误,即出租车没有呼叫,而是转到另一个窗口。 我认为这个错误来自实时数据库。如果你有不同的意见,写下你的答案。 错误:E/AndroidRuntime:致命异常:主进程:com。实例乌兹别克斯坦,PID:8915爪哇。lang.NullPointerException:尝试调用虚拟方法“double android”。地方地方getLatitude()'位于com上

  • 问题内容: } 我已经为按键设置了监听器。每当我按下按键时,为什么框架没有关闭? 问题答案: 调用 不会关闭框架,它将定义按下Windows装饰[X]关闭按钮时的行为(已禁用全屏显示)。您可以将其替换为或退出程序。

  • 如你所知,是一个已经在互联网上注册的域名。 我想知道为什么我可以创建一个域名为没有从AWS route53获得任何错误。 我已经看过这里的文件了。它看起来像是服务器的名称。com TLD不受我的route53配置的影响。 互联网阻止我影响域的机制是什么?

  • 刚开始使用pygame,当你按住箭头键时,试图让一个简单的点在屏幕上移动。目前,它只在你按键时移动,但你必须重复按键。 此外,我很感激你对我目前的代码有任何建议,可以改进或改变,使之更有效。

  • 问题内容: 我正在尝试开发JavaScript游戏引擎,但遇到了这个问题: 当我按下时,角色跳跃。 当我按下时,角色向右移动。 问题是当我向右按然后按空格键时,角色会跳跃然后停止移动。 我使用该功能来按下键。如何检查是否同时按下多个键? 问题答案: **注意:现已弃用 如果您了解概念,则可以轻松进行多次击键检测 我这样做的方式是这样的: 这段代码非常简单:由于计算机一次只传递一个按键,因此创建了一