Pygame - rect 出现并立即消失 [英] Pygame - rect appears and immediately disappears

查看:81
本文介绍了Pygame - rect 出现并立即消失的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在重写我的问题Pygame - rect 在我到达之前消失了 因为我想我没有描述清楚.

I am rewriting my question Pygame - rect disappears before I reach it because I think I have not described it clearly.

完整代码:

#! /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 并弹出红色矩形时,它显示一秒钟然后立即消失.我怎样才能让矩形保持直到我按下它的外面?

Just like my original question, when I press logoimage.png and the red rectangle pops up, it shows for a second then immediately disappears. How can I make it so that the rect will stay until I press outside of it?

推荐答案

您应该将 screen.fill((255, 255, 255)) 移出 while> 循环.这会导致问题,因为每次程序循环时,它都会将显示内容着色为白色,并覆盖您之前拥有的任何内容.解决此问题的一种方法是将 screen.fill((255, 255, 255)) 移出循环并将其放在 pygame.draw.rect 之前功能.这将在您放置矩形之前为屏幕着色,并且不会继续填充它.例如:

You should move the screen.fill((255, 255, 255)) out of the while loop. This is causing problems, because each time the program loops, it colors the display white, writing over whatever you had there before. One way to work around this is to move the screen.fill((255, 255, 255)) out of the loop and place it before the pygame.draw.rect function. This will color the screen before you place the rect, and will not continue to fill it. For instance:

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)

你也可以把它移到别处,或者想办法在你填满窗口后绘制矩形.

You could also move it elsewhere or come up with a way to draw rect every loop after you fill the window.

希望这有帮助.

这篇关于Pygame - rect 出现并立即消失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆