Python / Pygame如何使我的Score Text永远更新?

时间:2013-11-01 18:40:47

标签: python text pygame

我目前正在制作一款游戏,其中(目前)得分每秒增加1点。

但是,每当我运行程序时,使用我当前的代码(我相信每秒都会更改变量),文本不会改变。它只是保持在0。

这是我的代码:(我在这个问题中提供了文字来解释我的代码,比如评论。)

第1节:导入PyGame和其他标准程序代码。

import sys, pygame
from pygame.locals import *
pygame.init()
size = width, height = 800,500
screen = pygame.display.set_mode(size)

第2节:设置窗口标题和颜色变量。

pygame.display.set_caption("One Score (Created by - Not Really Working Lamp Productions:)")
WHITE = (255,255,255)

第3节:声明变量“得分”。我已经给它一个单独的代码示例,因为它与问题密切相关。

score = 0

第4节:填写屏幕并声明默认字体变量。

screen.fill (WHITE)
myfont = pygame.font.SysFont("monospace", 16)

第5节:免责声明文本(或者是请求文本,我不太确定。)

disclaimertext = myfont.render("Copyright, 2013, Not Really Working Lamp Productions.", 1, (0,0,0))
screen.blit(disclaimertext, (5, 480))

第6节:添加分数文本(可能是最重要的部分。)

scoretext = myfont.render("Score = "+str(score), 1, (0,0,0))
screen.blit(scoretext, (5, 10))

第7节:while循环(可能是最重要的部分。)

while 1:         
    for event in pygame.event.get():
        pygame.display.flip()
        if event.type == pygame.QUIT:sys.exit()
        pygame.time.wait(100)
        score = score + 1

那么我的代码在哪里放什么? (我需要屏幕不断更新分数,因为它从“while 1:”循环每秒都会改变。)

谢谢。

1 个答案:

答案 0 :(得分:1)

我不确定pygame如何构造其逻辑,但通常while true:游戏循环处理一些任务:

  • 处理用户输入
  • 更新游戏状态
  • 呈现状态。

所以在你的while 1循环中你应该这样做,按顺序(顺序非常重要)。

您希望确保处理来自用户的任何输入,更新游戏状态,然后将其呈现给用户!

更新

基本的谷歌搜索告诉我你应该打电话

scoretext = myfont.render("Score = "+str(score), 1, (0,0,0))
screen.blit(scoretext, (5, 10))

循环的每次迭代

修订

import sys
import pygame
from pygame.locals import *

pygame.init()
size = width, height = 800,500
screen = pygame.display.set_mode(size)
pygame.display.set_caption("testing")
myfont = pygame.font.SysFont("monospace", 16)
WHITE = (255,255,255)

score = 0

while True:
    pygame.display.flip()
    for event in pygame.event.get():
        # I remove the timer just for my testing
        if event.type == pygame.QUIT: sys.exit()

    screen.fill(WHITE)

    disclaimertext = myfont.render("Some disclaimer...", 1, (0,0,0))
    screen.blit(disclaimertext, (5, 480))

    scoretext = myfont.render("Score {0}".format(score), 1, (0,0,0))
    screen.blit(scoretext, (5, 10))
    score += 1

请注意,我填充屏幕并重新绘制每个循环:https://stackoverflow.com/a/1637386/1072724

  

您无法撤消写在另一个图形顶部的图形   超过你可以撤消一个粉笔插图绘制在顶部   在同一块板上的另一个粉笔插图。

     

通常在图形中完成的是你用它做什么   黑板 - 清除整个,下次只重绘你的东西   想留下来。