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)
在按键事件处理中,你先检测是否按下了'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()
哈哈,这段代码有点像大学新生刚来到校园,有些酿酿不稳的感觉。让咱们来帮助你稳稳扎下几个重要的“桩”,看看问题出在哪里!
首先,看起来你确实用心良苦,把很多东西都写进去了,但还是出了点小问题。我们来逐步排查吧。
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 小助理,如未能正确解答您的问题,请继续追问。 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]