微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pygame 杠杆图像显示按键点击问题

如何解决Pygame 杠杆图像显示按键点击问题

所以我有一个有 3 个不同方向的杠杆图像我的问题是当我使用 if [pygame.K_p] 多次我想在不同的图像之间切换但这是我的问题 VIDEO,当我点击 p 时,它显示右侧和中间的而不是左侧的,出于某种原因我必须按住 p 才能切换它我想要它,所以当我点击 p 1 次时它会切换我的杠杆方向。

在我的主循环中,我为第一个循环所做的事情我说如果我们点击 p 那么 move1 应该是 True 那么如果我的 move1 是真的那么它应该将我的杠杆图像的方向切换到右一个然后我的下一个我的形象是 在右侧,我们再次单击 p 它应该将我的图像切换回中间的 1 并重复 我不确定我是否做对了,但是是的

switch1 是*左边 switch2 是中间 switch3 右边

    if keys[pygame.K_p]:
        move1 = True
        move2 = False


    
    if keys[pygame.K_p]:
        if switch1.direction == "switch3":
            move1 = False
            move2 = True


    if switch1.direction == "switch3" or switch1.direction == "switch1":
        if keys[pygame.K_p]:
            switch1.direction = "switch2"
            if switch1.direction == "switch2":
                move1 = False
                move2 = False
            
    if move1:
        move2 = False
        switch1.direction = "switch3"

        if rop1.y <= 200:
            rop1.y += 2

        else:
            rop1.direction = "nomove"


    if move2:
        move1 = False
        switch1.direction = "switch1"


        if rop1.y <= 200:
            rop1.y -= 2

        else:
            rop1.direction = "nomove"

我正在寻找一种方法来切换我的杠杆 1 键绑定“p”左右或中间重复谢谢!

enter image description here

enter image description here

enter image description here

解决方法

对于此任务,您必须使用 KEYDOWN 事件而不是 pygame.key.get_pressed()

pygame.key.get_pressed() 返回一个包含每个键状态的序列。如果某个键被按下,则该键的状态为 True,否则为 False。使用 pygame.key.get_pressed() 评估按钮的当前状态并获得连续移动。

键盘事件(参见 pygame.event 模块)仅在键的状态改变时发生一次。 KEYDOWN 事件在每次按下键时发生一次。 KEYUP 每次释放键时出现一次。将键盘事件用于单个操作或逐步移动。


创建一个“开关”表面列表。使用一个变量来存储当前“开关”Surface (current_switch) 的索引。附加变量 (current_move ),指示按下 p 时是否需要增加或减少索引。

current_switch 的值可以是 0、1 或 2。0 表示左侧,1 表示中间,2 表示右侧。 current_move 为 -1 或 1。如果 current_move 为 -1,则按下 p 时开关向左移动。如果 current_move 为 1,则按下“p”时开关向右移动。当开关到达左侧或右侧位置时,必须更改 current_move

import pygame

pygame.init()
window = pygame.display.set_mode((200,200))
clock = pygame.time.Clock()

files = ['switch_left.png','switch_middle.png','switch_right.png'] 
switches = [pygame.image.load(f) for f in files]
current_switch = 0
current_move = 1

run = True
while run:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_p:
                
                if current_switch == 0: 
                    current_move = 1
                elif current_switch == len(switches)-1: 
                    current_move = -1
                current_switch += current_move

    window.fill(0)
    swtich_image = switches[current_switch]
    window.blit(swtich_image,swtich_image.get_rect(midbottom = (100,150)))
    pygame.display.flip()

pygame.quit()
exit()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。