You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Python中将文本框输入保存到变量?附Pygame游戏自定义起始速度需求

嘿,很高兴看到你在Pygame里折腾自己的小游戏!给起始速度加个自定义输入框确实能让玩家更有参与感,我来帮你搞定这个文本输入转整数的问题~

实现Pygame文本输入框并将输入转为整数变量

核心逻辑梳理

要实现这个需求,我们需要完成这几件关键事:

  • 监听键盘输入事件,收集用户输入的字符
  • 维护一个字符串变量暂存输入内容,处理退格等操作
  • 将输入的字符串安全转换为整数,同时处理无效输入(比如非数字内容)
  • 把转换后的整数赋值给你的起始速度变量

完整可复用代码示例

下面是一个独立的小示例,你可以直接测试,再把核心逻辑整合到你的游戏里:

import pygame
import sys

pygame.init()

# 基础屏幕设置
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("设置游戏起始速度")

# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GRAY = (200, 200, 200)
RED = (255, 0, 0)

# 文本输入核心变量
input_active = False  # 标记输入框是否被激活
input_text = ""       # 暂存输入的字符串
start_speed = 5       # 默认起始速度(你可以改成自己的初始值)
font = pygame.font.Font(None, 36)
error_msg = ""        # 用来提示无效输入

# 输入框矩形区域(位置和大小可自定义)
input_rect = pygame.Rect(screen_width//2 - 120, screen_height//2 - 25, 240, 50)

running = True
while running:
    screen.fill(WHITE)
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
            sys.exit()
        
        # 点击输入框激活/取消输入状态
        if event.type == pygame.MOUSEBUTTONDOWN:
            if input_rect.collidepoint(event.pos):
                input_active = True
                error_msg = ""  # 激活时清空错误提示
            else:
                input_active = False
        
        # 处理键盘输入(仅当输入框激活时)
        if event.type == pygame.KEYDOWN and input_active:
            if event.key == pygame.K_RETURN:
                # 按下回车,尝试转换输入为整数
                try:
                    # 先判断输入是否为空
                    if not input_text:
                        error_msg = "请输入数字!"
                    else:
                        temp_speed = int(input_text)
                        # 可以加个速度范围限制,避免数值太极端
                        if 1 <= temp_speed <= 20:
                            start_speed = temp_speed
                            input_text = ""  # 清空输入框
                        else:
                            error_msg = "速度请在1-20之间!"
                except ValueError:
                    error_msg = "请输入有效数字!"
            elif event.key == pygame.K_BACKSPACE:
                # 退格删除最后一个字符
                input_text = input_text[:-1]
                error_msg = ""
            else:
                # 只允许输入数字,过滤其他字符
                if event.unicode.isdigit():
                    input_text += event.unicode
                    error_msg = ""
    
    # 绘制输入框(激活时用灰色边框,未激活时黑色)
    pygame.draw.rect(screen, GRAY if input_active else BLACK, input_rect, 2)
    # 绘制输入的文本
    text_surface = font.render(input_text, True, BLACK)
    screen.blit(text_surface, (input_rect.x + 8, input_rect.y + 8))
    # 显示当前设置的起始速度
    speed_text = font.render(f"当前起始速度: {start_speed}", True, BLACK)
    screen.blit(speed_text, (screen_width//2 - speed_text.get_width()//2, screen_height//2 + 60))
    # 显示错误提示(如果有)
    if error_msg:
        error_surface = font.render(error_msg, True, RED)
        screen.blit(error_surface, (screen_width//2 - error_surface.get_width()//2, screen_height//2 + 110))
    
    pygame.display.flip()

pygame.quit()

关键部分解释

  • 输入激活状态input_active变量确保只有用户点击输入框时才处理键盘输入,避免游戏过程中误触输入。
  • 字符过滤event.unicode.isdigit()只允许数字输入,从源头避免非数字字符干扰。
  • 安全转换与验证:用try-except块处理整数转换的异常,同时加了范围限制和空输入判断,给用户清晰的错误提示,体验更友好。
  • 整合到你的游戏:把这段逻辑放到游戏的起始界面(比如主游戏循环前),或者做个“设置”按钮切换到这个模式,拿到start_speed后再进入主游戏逻辑即可。

适配你现有游戏的小技巧

  • 如果你已经有按钮系统,可以把“回车提交”改成“点击确认按钮提交”,逻辑和回车完全一致:点击按钮时执行整数转换和验证。
  • 可以把输入框的样式改成和你游戏风格匹配的(比如换颜色、加背景填充)。
  • 如果你的游戏有开始界面,可以把这个输入框直接放到开始界面里,和“开始游戏”按钮搭配使用。

这样就能完美实现你想要的功能啦,输入的内容会以整数形式保存到start_speed变量里,还能处理各种异常情况~

内容的提问来源于stack exchange,提问作者Krystian Ochot

火山引擎 最新活动