2017-01-26 8 views
0

私はPython 3.2とPygameを使用して頂きました。画像の読み込みに関するこの問題を除いて、すべてうまくいっています。Pygameに画像を表示し、次の画像にファイル名を上書きする

オリジナルでは、ゲームのメインメニューでビデオフォーマットを使用してアニメーションを表示したかったのですが、Pygame.movi​​eを正しく動作させることができず、複数のプラグインをインストールするのが快適ではありませんワーキング。

私は300以上の画像を持つ私のアニメーションから保存された画像シーケンスを含む別の方法を試みることに決めました。私はコードを自動的に生成するために別のPythonアプリケーションを作成しましたが、コードを何度も複製するのではなく、プログラムに1000行以上のコードをすべて表示することは効率的ではないと思います。

私の問題は、表示された画像(examplefilename0001.jpg)が次のファイル(examplefilename0002.jpg、examplefilename0003など)を表示するように上書きされるループをどのように作成するかについてはあまりよく分かりません。

私が書いたコードは以下のとおりですが、サポートされていないオペランドタイプがあることを示すエラーが表示されます。

counter=1 
for num in range(0,774): 
    mainmenu=pygame.image.load('Imgsequence/examplefilename000' + str(counter)+ '.jpg') 
    screen.blit(mainmenu +str(counter)+ (100,140)) 
    pygame.display.flip() 
    counter=counter+1 
    time.sleep(0.041) 

上記のコードを修正する方法はありますか。または、同じ/類似の結果を達成する別の方法がありますか?

+0

あなたの質問を編集し、少なくとも正確なエラーメッセージ、またはもっと良い方法ではバックトレース全体を含めてください。 – martineau

+0

ところで、私はあなたが '+ str(counter) 'を2回実行していることに気付きました。これはおそらく正しくないでしょう。 'load()'に渡されたファイル名のためだけに。それが返すサーフェスは 'mainmenu'変数に割り当てられます。 ([documentation](http://www.pygame.org/docs/ref/image.html#pygame.image.load)を参照してください)。 – martineau

答えて

2

関数screen.blitは、画像(pygame.Surface)と位置(通常は、pygame.Rectですが、タプル/リストなども同様です)という2つの引数をとります。私はあなたが何をやっているのかは分かりませんが、イメージ、文字列、タプルを一緒に追加しようとしているところで、引数を1つだけ渡しているため、エラーが発生します。私の推測では、あなたはscreen.blit(mainmenu, (100,140))がほしいと思っています。

しかし、あなたのプログラムがオペレーティングシステムの残りの部分と内部的にやりとりできるように、頻繁にイベントを処理する必要があるため、プログラムは機能しません。もしあなたがそうしなければ、オペレーティングシステムはpygameがクラッシュしたと考えます。

は、次の構造に似たメインループを作成することができます。

counter = 0 
image = pygame.image.load('Imgsequence/examplefilename000' + str(counter) + '.jpg') 
last_time = pygame.time.get_ticks() 
running = True 

while running: 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 

    if pygame.time.get_ticks() - last_time >= 41 and counter < 774: # 41 milliseconds instead of 0.041 seconds. 
     counter += 1 
     image = pygame.image.load('Imgsequence/examplefilename000' + str(counter) + '.jpg') 
     last_time = pygame.time.get_ticks() 

    screen.blit(image, (100, 140)) 
    pygame.display.update() 

すべてのGUIプログラムは、メインループを必要とします。 Pygameにはtheir websiteというチュートリアルもあります。

+0

私は 'if counter> 774:running = False'のようなものを追加して理想的にします:) – furas

+0

@furasもちろん、限界について忘れました。カウンターの制限を追加しましたが、終了する代わりにイメージを変更するため、ユーザーはいつ終了するかを決めることができます。 :) –

+0

この提案に感謝します。最初は、特定のポイントの後にファイル名を読み取ることができなかったため、エラーを表示していましたが、ファイルの名前を変更して、最初にゼロの束がないようにしました。 –

関連する問題