0

私はPythonでプログラムに取り組んでおり、Pygameを使用しています。これは基本的なコードがどのように見えるかです:

while 1:

   screen.blit(background, (0,0))
   for event in pygame.event.get():

      if event.type == QUIT:
        pygame.quit()
        sys.exit()

      if event.type == KEYDOWN and event.key == K_c:
        circle_create = True
        circle_list.append(Circle())

      if event.type == MOUSEBUTTONDOWN and circle_create == True:
        if clicks == 0:
            circle_list[i].center()
        clicks += 1


      if event.type == MOUSEMOTION and clicks == 1 and circle_create == True:
        circle_list[i].stretch()

   if circle_create == True:
     circle_list[i].draw_circle()

   if clicks == 2:
     clicks = 0
     i += 1
     circle_create = False    

 pygame.display.update()

私がやりたいのは、draw_circle()のオブジェクトの関数をループによって常に更新して、描画された円がリスト内のすべてのオブジェクトに表示されるようにすることですが、リストが繰り返されるため、追加された新しいオブジェクトとオブジェクトが更新されますすでに追加されているものは更新されません。

プログラムは動作し、ユーザー入力時に円を描きますが、更新の問題は私が解決する必要がある唯一の問題です。オブジェクトのリスト内のすべての要素をwhileループによって更新する方法はありますか?私は何日も試しましたが、良い解決策を見つけることができませんでした。どんなアイデアでも大歓迎です。ありがとう

4

3 に答える 3

1

ブリットの後にリスト全体を再描画する必要があります(画面全体を「背景」と「消去」の表面で覆います)。条件付きではなく、リスト全体を繰り返して描画する必要があります。イベントパートでは、誰がリストに参加し、誰がリストから退会するかを決定します。

Loop:
  Blit,starting new

  Event, here you decide who moves, who begin or cease to exist(append/remove)

  Redraw whole list, everyone in the circle_list.
于 2012-06-23T21:09:56.260 に答える
1

リスト内のすべての円を描画するには、それらを繰り返し処理して、更新する各呼び出しの前に描画します。

for circle in circle_list:
    circle.draw_circle()

編集:OPは誤った形式のコードを投稿しましたが、実際のコードは問題ないと言っているので、その提案を削除しました

于 2012-06-23T20:51:32.400 に答える
0

編集:私はあなたがすでに試したと思った:https ://stackoverflow.com/a/11172885/341744

プログラムは動作し、ユーザー入力時に円を描きますが、更新の問題は私が解決する必要がある唯一の問題です。オブジェクトのリスト内のすべての要素をwhileループによって更新する方法はありますか?

たとえば、反復中にアクターを殺した場合、一時リストで反復することができます。

for circle in circles[:]:
    circle.update()
于 2012-06-23T21:13:43.303 に答える