【发布时间】:2013-11-13 00:51:00
【问题描述】:
我目前正在创建一个游戏,其中(目前)分数每秒增加 1 分。
但是,使用我当前的代码(我相信它每秒都会更改变量),每当我运行程序时,文本都不会改变。它只是停留在 0。
这是我的代码:(我在这个问题中提供了文本来解释我的代码,例如 cmets。)
第 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”。我给了它一个单独的代码示例,因为它与问题密切相关。
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:”循环中每秒都在变化。)
谢谢。
【问题讨论】:
-
绘图操作需要在循环内进行。事实上,blitting 只发生一次,在程序开始时,再也不会发生。此外,
for event循环中的所有代码几乎肯定都在该循环之外(但仍在 while 内),if event.type行除外。 -
声明,而非免责声明
-
我写了一个文本渲染类,如果变量发生变化则渲染文本,否则使用缓存的表面。 stackoverflow.com/a/15516132/341744
-
我建议不要将程序分成几部分。很难将发生的事情拼凑起来。如果代码足够少,只需将所有代码放在一个块中并使用 cmets。