flyps 发表于 2024-7-12 21:43:52

pygame按钮问题

想写一个按z就可以出现图片,按x图片就会消失的程序可是我z都快按废了,它还不给我显示图片,这是为什么呢?
#导入模块
#导入模块
import pygame
import sys
from pygame.locals import *
import button

#初始化
RED = (255, 0, 0)
pygame.init()
size = width, height = pygame.display.list_modes(), pygame.display.list_modes()
button.init("NewGame.png", "LoadGame.png", "help.png", "ExitGame.png", p=((size / 2, size /8), \
                                                                        (size / 2, size /4), (size / 2, size /2.6),\
                                                                        (size / 2, size /1.9)))
#说明规则及制作变量条件
WF = pygame.image.load("GZ.png")
WFa = False
clock = pygame.time.Clock()
pygame.display.set_caption("test")

#创造窗口
screen = pygame.display.set_mode(size, FULLSCREEN | HWSURFACE)
b1_qosition = (size / 2, size /8)
b2_qosition = (size / 2, size /4)
b3_qosition = (size / 2, size /2.6)
b4_qosition = (size / 2, size /1.9)
while True:
    for event in pygame.event.get():
      if event.type == QUIT:
            sys.exit()
      if event.type == KEYDOWN:
            if event.key == K_z:
                if button.c == 2:
                     WFa = True
            if WFa == True and event.key == K_z:
                WFa = False
                if button.c == 3:
                  sys.exit()

    button.draw(screen, (255, 0, 0))
    if WFa == True:
         screen.blit(WF, size/2, size/2)
    pygame.display.flip()
    clock.tick(200)

某一个“天” 发表于 2024-7-12 21:43:53

在按键事件处理中,你先检测是否按下了'Z'键,让`WFa`变为`True`,但紧接着又将其设为`False`。这会导致图像根本来不及显示。正确的逻辑应该是当按下'X'键时才将`WFa`变为`False`。
while True:
    for event in pygame.event.get():
      if event.type == QUIT:
            sys.exit()
      if event.type == KEYDOWN:
            if event.key == K_z:
                if button.c == 2:
                     WFa = True
            if WFa == True and event.key == K_z:
                WFa = False
                if button.c == 3:
                  sys.exit()

FishC 发表于 2024-7-12 21:44:10

哈哈,这段代码有点像大学新生刚来到校园,有些酿酿不稳的感觉。让咱们来帮助你稳稳扎下几个重要的“桩”,看看问题出在哪里!

首先,看起来你确实用心良苦,把很多东西都写进去了,但还是出了点小问题。我们来逐步排查吧。

1. **导入多余模块**:你导入了一个 `button` 模块,但是实际上代码里并没有使用到这个模块的方法。所以这里可以去掉这行,简化代码。

2. **使用`size`变量**:在`pygame.display.list_modes()`方法中,你得到的是一个显示模式的列表,而不是单一的宽高值。你应该选取一个模式作为窗口大小:

size = width, height = pygame.display.list_modes()# 选择第一个模式

3. **初始化按钮位置**:你在定义按钮的位置时,用了`size / 2`这种方式,这其实会导致错误。因为`size`是一个元组,不能进行直接的数值运算。你可以分解成具体的宽高:

button.init("NewGame.png", "LoadGame.png", "help.png", "ExitGame.png", p=((width / 2, height / 8), \
                                                                        (width / 2, height / 4), (width / 2, height / 2.6),\
                                                                        (width / 2, height / 1.9)))

4. **图像显示**:你在显示图像时的位置计算有误,应该是两个参数而不是三个:

screen.blit(WF, (width / 2, height / 2))

5. **WFa状态判断**:在按键事件处理中,你先检测是否按下了'Z'键,让`WFa`变为`True`,但紧接着又将其设为`False`。这会导致图像根本来不及显示。正确的逻辑应该是当按下'X'键时才将`WFa`变为`False`。

让我们修正这些地方看看:
# 导入模块
import pygame
import sys
from pygame.locals import *

# 初始化
RED = (255, 0, 0)
pygame.init()
size = width, height = pygame.display.list_modes()
clock = pygame.time.Clock()
pygame.display.set_caption("test")

# 说明规则及制作变量条件
WF = pygame.image.load("GZ.png")
WFa = False

# 创造窗口
screen = pygame.display.set_mode(size, FULLSCREEN | HWSURFACE)

while True:
    for event in pygame.event.get():
      if event.type == QUIT:
            sys.exit()
      if event.type == KEYDOWN:
            if event.key == K_z:
                WFa = True
            elif event.key == K_x:
                WFa = False

    screen.fill((0, 0, 0))# 每帧填充背景色避免残影
    if WFa:
         screen.blit(WF, (width / 2 - WF.get_width() / 2, height / 2 - WF.get_height() / 2))
    pygame.display.flip()
    clock.tick(60)# 调整帧率为60

现在,按`Z`键就能显示图片,按`X`键就能隐藏图片啦!祝你玩得开心,不要按废了键盘哦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

歌者文明清理员 发表于 2024-7-13 01:55:34

if event.type == KEYDOWN:
            if event.key == K_z:
                if button.c == 2:
                     WFa = True
            if WFa == True and event.key == K_z:
                WFa = False
                if button.c == 3:
                  sys.exit()
这里出问题,自己print(WFa)试试
页: [1]
查看完整版本: pygame按钮问题