Pygame rect出现并立即消失

2024-09-27 00:15:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在重写我的问题 Pygame - rect disappears before I reach it因为我想我没有把它描述清楚。在

完整代码:

#! /usr/bin/python

import pygame, time, sys, random, os
from pygame.locals import *
from time import gmtime, strftime

pygame.init()

w = 640
h = 400

screen = pygame.display.set_mode((w, h),RESIZABLE)
clock = pygame.time.Clock()
x = y = 100

def starting():
    basicfont = pygame.font.SysFont(None, 48)
    text = basicfont.render('Starting...', True, (255, 255, 255), (0, 0, 255))
    textrect = text.get_rect()
    textrect.centerx = screen.get_rect().centerx
    textrect.centery = screen.get_rect().centery
    screen.fill((0, 0, 255))
    screen.blit(text, textrect)
    pygame.display.update()

def taskbar():
    basicfont = pygame.font.SysFont(None, 24)
    pygame.draw.rect(screen, ((0, 255, 0)), (0, h-40, w, 40), 0)
    text = basicfont.render(strftime("%Y-%m-%d", gmtime()), True, (0, 0, 0))
    text2 = basicfont.render(strftime("%H:%M:%S", gmtime()), True, (0, 0, 0))
    screen.blit(text, (w - 100, h - 37))
    screen.blit(text2, (w - 100, h - 17))
    logoimage = pygame.image.load("C:\Users\chef\Desktop\logo.png").convert()
    logoimage = pygame.transform.scale(logoimage, (40, 40))
    screen.blit(logoimage, (0, h-40),)

def start():
    button1, button2, button3 = pygame.mouse.get_pressed()
    mousex, mousey = pygame.mouse.get_pos()
    if 0 < mousex < 40 and h-40 < mousey < h:
        if button1:
            pygame.draw.rect(screen, ((255, 0, 0)), (0, int(h/2), int(w/6), int(h/2)-40), 0)
    pygame.display.update()

starting()
#time.sleep(2)

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()  
        elif event.type==VIDEORESIZE:
            w = event.dict['size'][0]
            h = event.dict['size'][1]
            screen=pygame.display.set_mode(event.dict['size'],RESIZABLE)
    screen.fill((255, 255, 255))
    taskbar()
    start()
    pygame.display.update()
    clock.tick(60)

就像我最初的问题,当我按下logoimage.png红色的矩形弹出,显示一秒钟,然后立即消失。我怎样才能使它在我按下它的外面之前一直保持不动呢?在


Tags: textrectimporteventgettimedisplayscreen
2条回答

您应该将screen.fill((255, 255, 255))移出while循环。这导致了一些问题,因为每次程序循环时,它都会将显示器涂成白色,并在之前的任何内容上进行书写。解决此问题的一种方法是将screen.fill((255, 255, 255))移出循环,并将其放在pygame.draw.rect函数之前。这将在放置rect之前给屏幕上色,并且不会继续填充它。例如:

if button1:
            screen.fill((255, 255, 255))
            pygame.draw.rect(screen, ((255, 0, 0)), (0, int(h/2), int(w/6), int(h/2)-40), 0)

你也可以把它移到其他地方,或者想出一种方法,在你填满窗口之后,画出每一个循环。在

希望这有帮助。在

你需要标记一个布尔值,它已经被点击了。比如:

btnClicked = false

def start():
    button1, button2, button3 = pygame.mouse.get_pressed()
    mousex, mousey = pygame.mouse.get_pos()
    if button1:
        if 0 < mousex < 40 and h-40 < mousey < h:
            btnClicked = true
        else:
            btnClicked = false

    if btnClicked:
        pygame.draw.rect(screen, ((255, 0, 0)), (0, int(h/2), int(w/6), int(h/2)-40), 0)
    pygame.display.update()

相关问题 更多 >

    热门问题