<p>所以我想弄清楚这个问题和所有其他问题之间的区别:</p>
<p>我想打破一个很长的函数,它是这样开始的:</p>
<pre><code>while running:
framerate += 1.0
if Counter > 0.0:
</code></pre>
<p>但是我不想仅仅使用<code>running=False</code>来停止它,因为这样已经触发的最后一个while循环仍然会完成并运行到最后。
我需要这个来微调帧速率,所以循环必须停止在while循环中的位置,然后从头开始重新启动</p>
<p>既然while循环很长,我真的不想添加一个</p>
<pre><code>if running==False:
break
</code></pre>
<p>到while循环中的每个表达式</p>
<p>有没有什么方法可以在不向while循环中添加几十个break表达式的情况下脱离while循环</p>
<p>如果您想要while代码的示例,请参见:</p>
<pre><code>running=True
while running:
framerate += 1.0
if Counter > 0.0:
SetCounter()
elif Counter == 0.0:
newframerate += 1
Counter = -1.0
#Check for collisions:
for enemy in enemies:
for bullet in bullets:
if enemy.Collides(bullet):
if enemy.state=="damaged":
enemy.lt(random.randint(-10,10))
else:
enemy.state="damaged"
enemy.speed=0.15
enemy.shapesize(0.5, 0.5, 10)
enemy.color("black")
bullet.status="ready"
bullet.ht()
Sparks.explode(enemy)
if(enemy.Collides(spaceship)):
if enemy.state=="whole":
if not triggerexplosiononce:
restart=True
Sparks.explode(spaceship)
triggerexplosiononce=True
elif enemy.state=="damaged":
metal+=1
enemy.ht()
enemy.state="done"
enemy.setposition(10000,10000)
size+=0.05
spaceship.shapesize(size,size*1.4, 1)
if exhaustoffset<15:
exhaustoffset+=0.05
exhaustoffset*=1.4
else:
exhaustoffset+=0.1
#gun.shapesize(size*1.4,size*0.3, 1)
shipwindow.shapesize(size*0.3,size*0.3, 1)
#Speed up the game:
window.update()
#automatically MOVE THE ENEMY
for enemy in enemies:
if enemy.isvisible():# and enemy.state=="whole":
enemy.move()
#Move the bullet
for bullet in bullets:
bullet.move()
#Gun Rotation (gun used as fire exhaust for now
#if keyboard.is_pressed("c"):# and keyboard.is_pressed("ctrl"):
#gun.Turn("Left")
#if keyboard.is_pressed("v"):# and keyboard.is_pressed("Ctrl"):
#gun.Turn("Right")
#Reset Once functionality
if spaceship.xcor()>-349 and spaceship.xcor()<349 \
and spaceship.ycor()>-349 and spaceship.ycor()<349:
Once=False
#Breaks
if keyboard.is_pressed("b") and spaceship.speed>0.1:# and keyboard.is_pressed("ctrl"):
spaceship.deccelerate(4)
#SPACESHIP MOVEMENT
if spaceship.xcor()>-350 and spaceship.xcor()<350 \
and spaceship.ycor()>-350 and spaceship.ycor()<350:
#Rotate the Spaceship
if keyboard.is_pressed("Left"):
spaceship.Turn("Left")
#Drone Bullet Experiment
#bullet.Turn("Left")
if keyboard.is_pressed("Right"):
spaceship.Turn("Right")
# Drone Bullet Experiment
#bullet.Turn("Right")
#Motor
if keyboard.is_pressed("Up"):
gun.showturtle()
if spaceship.speed<-0.1*spaceship.speedlimit:
spaceship.accelerate(4)
elif spaceship.speed >= -0.1*spaceship.speedlimit and spaceship.speed <0.0:
spaceship.speed=0.1*spaceship.speedlimit
elif spaceship.speed<spaceship.speedlimit:
spaceship.accelerate()
if spaceship.xcor()>-349 and spaceship.xcor()<349 \
and spaceship.ycor()>-349 and spaceship.ycor()<349:
spaceship.fd(spaceship.speed)
else:
if Once==False:
Once=True
spaceship.fd(spaceship.speed/spaceship.speedlimit)
elif keyboard.is_pressed("Down"):
gun.hideturtle()
if spaceship.speed>0.1*spaceship.speedlimit:
spaceship.deccelerate(4)
elif spaceship.speed <= 0.1*spaceship.speedlimit and spaceship.speed >0.0:
spaceship.speed=-0.1*spaceship.speedlimit
elif spaceship.speed>-spaceship.speedlimit:
spaceship.deccelerate()
if spaceship.xcor()>-349 and spaceship.xcor()<349 \
and spaceship.ycor()>-349 and spaceship.ycor()<349:
spaceship.fd(spaceship.speed)
else:
if Once==False:
Once=True
spaceship.fd(spaceship.speed/spaceship.speedlimit)
elif spaceship.speed>0.1*spaceship.speedlimit or spaceship.speed<-0.1*spaceship.speedlimit:
gun.hideturtle()
if spaceship.speed>0.1*spaceship.speedlimit:
spaceship.deccelerate()
elif spaceship.speed<-0.1*spaceship.speedlimit:
spaceship.accelerate()
if spaceship.xcor() > -349 and spaceship.xcor() < 349 \
and spaceship.ycor() > -349 and spaceship.ycor() < 349:
spaceship.fd(spaceship.speed)
else:
if Once == False:
Once = True
# spaceship.speed = 0.1
spaceship.fd(spaceship.speed / spaceship.speedlimit)
#Autorotation against borders
elif spaceship.xcor()<-349:
spaceship.setx(-349)
if keyboard.is_pressed("Right")==False and spaceship.heading()>180 and spaceship.heading()<270:
spaceship.lt(1*spaceship.speedlimit)
elif keyboard.is_pressed("Left")==False and spaceship.heading()<180 and spaceship.heading()>90:
spaceship.rt(1*spaceship.speedlimit)
elif spaceship.xcor()>349:
spaceship.setx(349)
if keyboard.is_pressed("Right")==False and spaceship.heading()>0 and spaceship.heading()<90:
spaceship.lt(1*spaceship.speedlimit)
elif keyboard.is_pressed("Left")==False and spaceship.heading()<360 and spaceship.heading()>270:
spaceship.rt(1*spaceship.speedlimit)
elif spaceship.ycor()<-349:
spaceship.sety(-349)
if keyboard.is_pressed("Right")==False and spaceship.heading()>270 or spaceship.heading()<90:
spaceship.lt(1*spaceship.speedlimit)
elif keyboard.is_pressed("Left")==False:
spaceship.rt(1*spaceship.speedlimit)
elif spaceship.ycor()>349:
spaceship.sety(349)
if keyboard.is_pressed("Right")==False and spaceship.heading()>90 and spaceship.heading()<270:
spaceship.lt(1*spaceship.speedlimit)
elif keyboard.is_pressed("Left")==False:
spaceship.rt(1*spaceship.speedlimit)
#keyboard.on_press_key("q", Do)
#keyboard.on_release_key("q", Do)
#Teleportation Grow effect of the Beamer window:
if dummygrow==True and growcounter<10:
dummylengths+=0.05
dummy.turtlesize(dummylengths,dummylengths,1)
growcounter+=1
elif dummygrow==True and growcounter>9:
dummylengths=0.3
growcounter=0
elif dummygrow==False:
pass
#Explosion: Move the sparks:
if Sparks.sparksmoving==True and movecounter < 25:
movesparks()
movecounter+=1
elif Sparks.sparksmoving==True and movecounter>24:
Sparks.sparksmoving=False
movecounter=0
for spark in sparksgroup:
spark.ht()
if restart==True:
spaceship.setposition(0, 0)
spaceship.setheading(90)
spaceship.speed=0
for enm in enemies:
if enm.isvisible():
enm.showturtle()
enm.setposition(random.randint(-349, 349), random.randint(-349, 349))
if enm.xcor()<50 and enm.xcor()>-50\
and enm.ycor()<50 and enm.ycor()>-50:
enm.fd(100)
triggerexplosiononce=False
restart=False
#Gun and Window Follow Position and Rotation:
gun.setheading(spaceship.heading())
gun.setposition(spaceship.xcor(),spaceship.ycor())
gun.fd(-exhaustoffset)
shipwindow.setposition(spaceship.xcor(),spaceship.ycor())
Once=False
Counter=Delay```
</code></pre>