【问题标题】:my click's counter program wont work我的点击计数器程序不起作用
【发布时间】:2014-11-20 18:39:50
【问题描述】:

导入模块并在此处声明变量后,我的代码就是这样开始的:

while True:

    pygame.display.flip()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == MOUSEBUTTONDOWN:
            dibujarCirculo()
            cont += 1
    contador = texto.render("Clicks: " + str(cont), 1, green)
    ventana.blit(contador, CONT_POS)
    pygame.display.update()

当我运行它时,我会得到黑色的屏幕填充和一些文本“点击:0”,当我点击鼠标时,而不是转动“点击:1”,1 堆叠在零上,它变得一团糟。 我的意图很简单:当您单击窗口中的某个位置时,它会将 1 添加到单击计数器。它实际上也画了一个圆圈,但这并不重要。

如果你想看一下,我会发布整个代码。

import sys
import pygame
from pygame.constants import *


pygame.init()

ventana = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Basics")

red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)
darkBlue = (0, 0, 128)
white = (255, 255, 255)
black = (0, 0, 0)
pink = (255, 200, 200)

cont = 0
CONT_POS = (50, 100)

texto = pygame.font.SysFont("monospace", 15)

def dibujarCirculo():
    pos = pygame.mouse.get_pos()
    radius = 10
    pygame.draw.circle(ventana, white, pos, radius)


cont = 0

while True:

    pygame.display.flip()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == MOUSEBUTTONDOWN:
            dibujarCirculo()
            cont += 1
    contador = texto.render("Clicks: " + str(cont), 1, green)
    ventana.blit(contador, CONT_POS)
    pygame.display.update()

注意:这是我第二次发布这些,因为人们无缘无故地投票反对,并且当我试图以我所知道的最佳方式解释我的问题时,也将帖子标记为离题......

【问题讨论】:

  • 人们之所以投反对票,是因为他们认为您应该在发布问题之前自己进行调试。此外,您应该发布一个问题仍然存在的最小示例。
  • 您所看到的是,您总是在画布 (ventana) 顶部绘图,而没有先清除它。我敢打赌,尽管仅在鼠标单击时绘制了圆圈,但它们也会留在屏幕上。我想你需要在绘制之前清除屏幕(或者在乐谱上放置一个黑色方块)。

标签: python python-2.7 pygame pycharm


【解决方案1】:

您需要清除屏幕以避免在旧文本之上绘图

while True: 
    pygame.display.flip()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == MOUSEBUTTONDOWN:
            dibujarCirculo()
            cont += 1
    ventana.fill((0,0,0)) # clear the screen
    contador = texto.render("Clicks: " + str(cont), 0, green)
    ventana.blit(contador, CONT_POS)
    pygame.display.update()

您可以在第一个函数中使用黑色添加 blit,以便每次都覆盖 blit。

def dibujarCirculo():
    pos = pygame.mouse.get_pos()
    radius = 10
    pygame.draw.circle(ventana, white, pos, radius)
    contador = texto.render("Clicks: " + str(cont), 0, black) # set background to black
    ventana.blit(contador, CONT_POS)


while True:
    pygame.display.flip()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == MOUSEBUTTONDOWN:
            dibujarCirculo()
            cont += 1
    contador = texto.render("Clicks: " + str(cont), 1, green)
    ventana.blit(contador, CONT_POS)
    pygame.display.update()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多