gpt4 book ai didi

python - 如何创建同一类的多个对象,每个对象内部都有无限循环

转载 作者:行者123 更新时间:2023-12-01 00:25:32 25 4
gpt4 key购买 nike

我尝试使用 onkey(spawn, "space") 生成球,结果没问题。但如何使用 for 循环生成它们呢?看来类方法内部的“while True”循环不允许在外部进行“for 循环”的迭代。

from turtle import *
from random import randint

w = 100
h = 100
BallList = []

sc = Screen()
sc.tracer(0)

class Ball(Turtle):
def __init__(self, x, y, s, c):
Turtle.__init__(self)
self.x = x
self.y = y
self.s = s
self.c = c
self.color(self.c)
self.shape("circle")
self.penup()
self.speed(0)
self.setheading(self.towards(randint(-100, 100), randint(-100, 100)))

def move(self):
self.forward(self.s)

def bounce(self):
if self.xcor() > w:
self.setheading(self.towards(-w, randint(-100, 100)))
if self.xcor() < -w:
self.setheading(self.towards(w, randint(-100, 100)))
if self.ycor() > h:
self.setheading(self.towards(randint(-100, 100), -h))
if self.ycor() < -h:
self.setheading(self.towards(randint(-100, 100), h))

def loop(self):
while True:
self.move()
self.bounce()
sc.update()

for i in range(10):
BallList.append(Ball(0, 0, 10, (0, 100, 0)))
BallList[i].loop()

最佳答案

  1. 删除 Ball 类的 loop 方法中的无限循环,使其看起来像这样:
  def loop(self):
self.move()
self.bounce()
sc.update()
  • 先创建你的球,暂时不要尝试处理它们:
  • for i in range(10):
    BallList.append(Ball(0, 0, 10, (0, 100, 0)))
  • 通过无限循环来更新球:
  • while True:
    for i in range(10):
    BallList[i].loop()
    <小时/>
    • 我认为将 Ball 类的 loop 方法重命名为 update 之类的方法是有意义的,因为它不再循环任何东西
    • BallList 不是一个类,我认为将其重命名为 balls 更有意义(注意小写字母,以免与类混淆)

    编辑:我认为在 Ball-s loop 方法中调用 sc.update() 可能是多余的。在重新计算所有球之后,调用 sc.update() 一次可能就足够了,如下所示:

    while True:
    for i in range(10):
    BallList[i].loop()
    sc.update()

    关于python - 如何创建同一类的多个对象,每个对象内部都有无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58606686/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com