0

当它出现在空闲外壳上时,我需要将 kb 输入到 pygame 屏幕上,任何建议将不胜感激。

这段代码是从一个较大的程序中提取的,主要是基于屏幕的,但我有时需要从 kb 中输入一些数据(数字)

import sys
import pygame
from pygame.locals import *
pygame.init()

N= ''
screen = pygame.display.set_mode((600,600))
font= pygame.font.Font(None,40)
screen.fill((255,255,255))
pygame.display.flip
pygame.display.update()


def score(C,y):
    SetWnd = font.render( C,True,(0,0,255))
    screen.blit(SetWnd, (15, 100+y))
    pygame.display.update()


def start():
    while True:
        name=''

        for evt in pygame.event.get():
                if evt.type == KEYDOWN:
                    if evt.unicode.isalnum(): # unicode
                        name+=evt.unicode
                        print name,

                    elif evt.key == K_BACKSPACE:
                            name = name[:-1]
                            print name,
                    elif evt.key == K_RETURN:
                        return N
                elif evt.type == QUIT:
                    pygame.quit()
                    sys.exit()
def Pchange(c,y):
    block = font.render(N, True, (0,0,0))
    rect = block.get_rect()
    rect.move_ip(75,100 + y)
    screen.blit(block,rect)
    pygame.display.flip()



score('wind', 0)
score('elev',20)

N = start()
Pchange(N,0)
Pchange(N,20)
4

1 回答 1

0

首先,您两次绘制分数,我认为效果很好。

问题在于你的启动功能。您没有在 while 循环中调用任何绘制或更新函数。在您的事件 foreach 中,您添加一个数字name,并在按下 enter 时退出 while 循环。然后你用 Pchange 画了两次,但是你的函数没有使用正确的参数。你有:

def Pchange(c,y):
    block = font.render(N, True, (0,0,0))

您正在使用全局 N,即 ''。因此,要解决此问题,您需要更改Nc.

下一个问题是游戏在按下回车后立即退出。由于您仅粘贴了程序的一部分,因此可能并非如此。pygame.quit()如果是,则进行另一个 while 循环,然后等待 ESC 键调用sys.exit()

于 2013-01-23T16:40:27.250 回答