在 pygame 中增加点击次数
Increse number on click in pygame
我正在尝试创建一个评分系统。因此,如果用户点击数字,则玩家 1 获得 1 分,如果他们点击字母,玩家 2 获得 1 分
import pygame
import pygame.freetype
import random
pygame.init()
pygame.font.init()
screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN) # Fullscreen
在这里我创建了一个变量来存储数字并将其更改为在屏幕上显示。
number = 0
str_number = str(number)
def text():
game_font = pygame.freetype.SysFont("monospace", 45)
text_surface, rect = game_font.render(str_number, (0, 0, 0))
screen.blit(text_surface, (250, 700))
game_font = pygame.freetype.SysFont("monospace", 45)
text_surface, rect = game_font.render(str_number, (0, 0, 0))
screen.blit(text_surface, (1300, 700))
在我的主循环中,每当用户按下该键时,我都会尝试将数字加一。但它不起作用。
running = True
while running:
screen.fill((255, 194, 102)) # RGB
for event in pygame.event.get(): # Event handler
...
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_1 or event.key == pygame.K_b and len(cards) > 0:
cards.pop(0)
number += 1
if event.key == pygame.K_2 or event.key == pygame.K_n and len(cards) > 1:
cards.pop(1)
number += 1
if event.key == pygame.K_3 or event.key == pygame.K_m and len(cards) > 2:
cards.pop(2)
number += 1
text()
pygame.display.update()
当您更改数字时,呈现的文本不会神奇地改变。增加数字后必须重新渲染文本。
不要在每一帧中创建 pygame.font.Font
对象,也不要在每一帧中渲染文本。在程序开头创建文本 Surface 一次。每帧 blit
文本 Surface:
用函数简化代码。例如:
game_font = pygame.freetype.SysFont("monospace", 45)
text_surface, rect = game_font.render(str(number), (0, 0, 0))
def text():
screen.blit(text_surface, (250, 700))
def increment_score():
global number
number += 1
return game_font.render(str(number), (0, 0, 0))
while running:
# [...]
for event in pygame.event.get():
# [...]
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_1 or event.key == pygame.K_b and len(cards) > 0:
cards.pop(0)
text_surface, rect = increment_score()
if event.key == pygame.K_2 or event.key == pygame.K_n and len(cards) > 1:
cards.pop(1)
text_surface, rect = increment_score()
if event.key == pygame.K_3 or event.key == pygame.K_m and len(cards) > 2:
cards.pop(2)
text_surface, rect = increment_score()
我正在尝试创建一个评分系统。因此,如果用户点击数字,则玩家 1 获得 1 分,如果他们点击字母,玩家 2 获得 1 分
import pygame
import pygame.freetype
import random
pygame.init()
pygame.font.init()
screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN) # Fullscreen
在这里我创建了一个变量来存储数字并将其更改为在屏幕上显示。
number = 0
str_number = str(number)
def text():
game_font = pygame.freetype.SysFont("monospace", 45)
text_surface, rect = game_font.render(str_number, (0, 0, 0))
screen.blit(text_surface, (250, 700))
game_font = pygame.freetype.SysFont("monospace", 45)
text_surface, rect = game_font.render(str_number, (0, 0, 0))
screen.blit(text_surface, (1300, 700))
在我的主循环中,每当用户按下该键时,我都会尝试将数字加一。但它不起作用。
running = True
while running:
screen.fill((255, 194, 102)) # RGB
for event in pygame.event.get(): # Event handler
...
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_1 or event.key == pygame.K_b and len(cards) > 0:
cards.pop(0)
number += 1
if event.key == pygame.K_2 or event.key == pygame.K_n and len(cards) > 1:
cards.pop(1)
number += 1
if event.key == pygame.K_3 or event.key == pygame.K_m and len(cards) > 2:
cards.pop(2)
number += 1
text()
pygame.display.update()
当您更改数字时,呈现的文本不会神奇地改变。增加数字后必须重新渲染文本。
不要在每一帧中创建 pygame.font.Font
对象,也不要在每一帧中渲染文本。在程序开头创建文本 Surface 一次。每帧 blit
文本 Surface:
用函数简化代码。例如:
game_font = pygame.freetype.SysFont("monospace", 45)
text_surface, rect = game_font.render(str(number), (0, 0, 0))
def text():
screen.blit(text_surface, (250, 700))
def increment_score():
global number
number += 1
return game_font.render(str(number), (0, 0, 0))
while running:
# [...]
for event in pygame.event.get():
# [...]
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_1 or event.key == pygame.K_b and len(cards) > 0:
cards.pop(0)
text_surface, rect = increment_score()
if event.key == pygame.K_2 or event.key == pygame.K_n and len(cards) > 1:
cards.pop(1)
text_surface, rect = increment_score()
if event.key == pygame.K_3 or event.key == pygame.K_m and len(cards) > 2:
cards.pop(2)
text_surface, rect = increment_score()