2017-05-17 9 views
0

以下は、私が現在A-Levelの授業のために作っているゲームのスニペットです。私は、テキストを一度に1文字(スクロール、ポケモンスタイル)で公開したいイントロのカットシーンを作っています。しかし、私の現在の解決策では、1行のテキストに対してforループを使用する必要があります。これは視覚効果には問題ありませんが、ユーザーがウィンドウとやり取りできないようにします。スキップボタンを追加したいのですが、この問題を解決することはできません。私はより多くのifステートメントを使用しようとしましたが、コードが面倒で、バグがあり、効率があまり良くありませんでした。より簡単で効率的な修正がありますか?ゲームの機能を阻害することなく、スクロールテキストを作成するには? Pygame

screen.blit(introImage4,(0,16)) 
if flags["IntroStage3"] == True: 
    for i in range(len(introText[0])): 
     introTextImage1 = myFont.render(introText[0][i], True, white) 
     screen.blit(introTextImage1,(50 + (myFont.size(introText[0][:i])[0]), 50)) 
     pygame.display.update() 
     clock.tick(textFPS) 
    for i in range(len(introText[1])): 
     introTextImage2 = myFont.render(introText[1][i], True, white) 
     screen.blit(introTextImage2,(50 + (myFont.size(introText[1][:i])[0]), 100)) 
     pygame.display.update() 
     clock.tick(textFPS) 
    for i in range(len(introText[2])): 
     introTextImage3 = myFont.render(introText[2][i], True, white) 
     screen.blit(introTextImage3,(50 + (myFont.size(introText[2][:i])[0]), 150)) 
     pygame.display.update() 
     clock.tick(textFPS) 
    flags["IntroStage4"] = True 
    flags["IntroStage3"] = False 

if flags["IntroStage4"] == True: 
    introTextImage1 = myFont.render(introText[0], True, white) 
    introTextImage2 = myFont.render(introText[1], True, white) 
    introTextImage3 = myFont.render(introText[2], True, white) 
    screen.blit(introTextImage1,(50, 50)) 
    screen.blit(introTextImage2,(50, 100)) 
    screen.blit(introTextImage3,(50, 150)) 
    flags["IntroStage5"] = True 

答えて

0

ここでの問題は、forループが完了するまでイベントハンドラが新しいチェックを実行できないことです。

解決策は、テキストのアニメーション機能を記述することです。画面に表示されたテキストを含む変数を追加することでこれを行うことができます。この変数の値を、時間依存の値に基づいてスクロールしたいテキスト全体の別の部分に変更することができます。

この時間依存値は、スクロールテキストをトリガしたイベントから経過した時間になります。ただ、ここでそれをもう少し明確にする

は例です:

は、私は完全なテキストは、「アリスはフルーツの大きなバスケットを持っている」ようにしたいが、私は私のスクロールテキストボックスに一つの単語に合うことができると言います

text = "Alice has a big basket of fruit" 
def animate_text(text,t): #here t is current unix time minus the unix time whenthat the event that triggered the text scrolling 
    text_batches=text.split(' ') 
    return text_batches[t//2] if t//2 <= len(text_batches) else return False 
ので

今、我々はあなたがアニメーションから経過した時間に対応するバッチをブリットすることができ、あなたのメインループでループを入れ子にするのではなく、バッチにテキストを分割しました:私は2秒のためにそれを表示したいです開始しました

while 1!=0: 

    # game loopy stuff here 

    blit(animate_text(text,time.time()-time_when_animation_started)) 

これはちょっと厄介で疑似コードなので、あなたの特定の状況を完全には処理できませんが、ここでその考えを得てください。

関連する問題