1

重複の可能性:
PythonとPygame:反復中にループの下でリスト内のすべての要素を更新する

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

import pygame ---and other stuff necessary

Class_name():

        draw_circle()

        --some other functions--- 

i = 0 

clicks = 0

object_list = []

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()



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

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

    pygame.display.update()

したがって、基本的に、オブジェクトは、キー「c」が押されたときにクラスから作成されます。このオブジェクトはリストに追加され、リストが繰り返されます。次に、ユーザーはマウスなどを押して円を描き、必要な数の円を作成します。

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

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

4

1 に答える 1

1

既存のコードと、最新の円だけでなくすべての円を描きたいというあなたの表明した願望に基づいて、次のコード変更により、探している動作が得られると思います。

#circle.circle_computation()
if circle_create == True:
    #circle_list[i].draw_circle()
    for j in xrange(i):
        circle_list[j].draw_circle()
于 2012-06-24T07:26:05.283 に答える