1

我目前正在创建一个游戏,其中(目前)分数每秒增加 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”。我给了它一个单独的代码示例,因为它与问题密切相关。

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:”循环中每秒改变一次。)

谢谢你。

4

1 回答 1

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

您无法撤消写在另一个图形顶部的一个图形,就像您无法撤消在同一板上的另一个粉笔插图顶部绘制的一个粉笔插图一样。

通常在图形中所做的是您对黑板所做的 - 清除全部内容,下次只重绘您想要保留的内容。

于 2013-11-01T18:44:12.377 回答