亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何讓這個graphics.py代碼中的動作更加流暢呢?

如何讓這個graphics.py代碼中的動作更加流暢呢?

慕容708150 2023-06-27 18:35:25
我剛剛開始使用graphics.py,并試圖制造一些移動的雨。from graphics import *import random as rrects = []colorList = [color_rgb(255, 170, 204), color_rgb(255, 187, 204), color_rgb(255, 204, 204),              color_rgb(255, 221, 204), color_rgb(255, 238, 204)]def main():    r.seed()    win = GraphWin("Random Squares", 800, 800)    win.setBackground("black")    for i in range(3000):        x1 = r.randint(0,800)        x2 = r.randint(0,10)        y1 = x1+5        y2 = x2+20        var = Rectangle(Point(x1,x2), Point(y1,y2))        rects.append(var)        rects[i].setFill(r.choice(colorList))        rects[i].draw(win)        for i in range(len(rects)):            rects[i].move(0,r.randint(10,100))            update(10000)    win.getMouse()    win.close()if __name__ == '__main__':    main()我認為我遇到的問題是,添加每個新矩形時都會發生移動更新。誰能幫我想出更好的方法來做到這一點?
查看完整描述

1 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

我的建議是忘記autoflush并update()直到你的算法以最快的速度運行。具體來說,您最終會得到 3000 個要更新的矩形,盡管屏幕上一次最多不會超過 15 個。你最好去掉從底部掉下來的矩形:


from random import seed, randint, choice

from graphics import *


WIDTH, HEIGHT = 800, 800


colorList = [

    color_rgb(255, 170, 204),

    color_rgb(255, 187, 204),

    color_rgb(255, 204, 204),

    color_rgb(255, 221, 204),

    color_rgb(255, 238, 204)

    ]


def main():

    seed()


    win = GraphWin("Random Squares", WIDTH, HEIGHT)

    win.setBackground("black")


    rects = []


    for _ in range(3000):

        for rect in list(rects):  # iterate over a shallow copy

            rect.move(0, randint(10, 100))


            if rect.getP1().getY() > HEIGHT:

                rect.undraw()

                rects.remove(rect)


        x1 = randint(0, WIDTH - 5)

        y1 = randint(0, 10)


        rect = Rectangle(Point(x1, y1), Point(x1 + 5, y1 + 20))

        rect.setFill(choice(colorList))

        rect.draw(win)


        rects.append(rect)


    win.getMouse()

    win.close()


if __name__ == '__main__':

    main()

現在我們只跟蹤大約 15 個矩形,而不是數百或數千。只有在優化算法之后,才考慮autoflush性能update()是否不符合您的喜好:


def main():

    seed()


    win = GraphWin("Random Squares", WIDTH, HEIGHT, autoflush=False)

    win.setBackground("black")


    rects = []


    for _ in range(3000):

        for rect in list(rects):  # iterate over a shallow copy

            rect.move(0, randint(10, 100))


            if rect.getP1().getY() > HEIGHT:

                rect.undraw()

                rects.remove(rect)


        x1 = randint(0, WIDTH - 5)

        y1 = randint(0, 10)


        rect = Rectangle(Point(x1, y1), Point(x1 + 5, y1 + 20))

        rect.setFill(choice(colorList))

        rect.draw(win)


        update()


        rects.append(rect)


    win.getMouse()

    win.close()


查看完整回答
反對 回復 2023-06-27
  • 1 回答
  • 0 關注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號