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ループでは、その順序で行う必要があります (順序は非常に重要です)。

ユーザーからの入力を確実に処理し、ゲームの状態を更新して、それをユーザーに提示する必要があります。

アップデート

基本的なGoogle検索で、電話する必要があることがわかります

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

同じボード上の別のチョーク イラストの上に描かれた 1 つのチョーク イラストを元に戻すことができないのと同じように、別のグラフィックの上に重ねて書かれた 1 つのグラフィックを元に戻すことはできません。

グラフィックスで一般的に行われるのは、黒板で行うことです。すべてをクリアし、次回は残したいものだけを再描画します。

于 2013-11-01T18:44:12.377 に答える