python - 如何创建同一类的多个对象,每个对象内部都有一个无限循环
问题描述
我尝试使用 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()
解决方案
loop
删除类方法中的无限循环Ball
,使其看起来像这样:
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()
loop
我认为将类的方法重命名为类似的Ball
东西是有意义的update
,因为它不再循环任何东西- BallList 不是一个类,我认为将其重命名为更有意义
balls
(注意小写字母,不要弄乱类)
编辑:我认为sc.update()
在 Ball-sloop
方法中调用可能是多余的。sc.update()
在重新计算所有球之后,调用那个东西可能就足够了,如下所示:
while True:
for i in range(10):
BallList[i].loop()
sc.update()
推荐阅读
- java - random-beans 初始化 bean 集合大小与配置大小不匹配
- ruby-on-rails - 按钮不调用红宝石中的控制器
- sql - SQL 字符串中数字的总和
- python-3.x - 溢出错误:字符参数不在范围内(0x110000)在 python 3.5 中使用 getch
- android - 使库所需的相机权限为非必需
- c# - where 子句中的动态 linq 反斜杠
- ios - 如何将我的 json 数据传递给表视图和其他视图控制器?
- swift - Swift - 如果拖动则在内部执行修饰
- javascript - React:我如何从 URL 中读取代码
- firebase - 我在哪里可以找到我的 Firebase apiKey 和 authDomain