Probleme mit Multithreading mit dem turtle Modul
Verfasst: Sonntag 22. Mai 2011, 12:34
Hi ich hab ne Frage wegen dem Turtle Modul.
Ich hab folgendes programmiert:
Das Problem bei der Sache ist, dass die SchussObjekte sich nicht gleichzeitig bewegen, sondern nur eins nach dem anderen. Außerdem stoppt die Spielfigur für ne kurze Zeit im Laufen. Dies wollte ich lösen indem ich die objekte gleichzeitig laufen lass, ich hab mir ein Paar tutorials von galieo computing über threading modul durchgelesen und wollte das jetzt anwenden. Es klappt aber nicht, denn wenn ich zweimal hintereinander schießen will bekomme ich (nicht von der IDLE) folgende Feherlmeldung: Microsoft Visual C++ Runtime Library: Runtime Error... this application has requested the runtime to terminate it in an unusual way... nervt halt ein wenig, denn sonst kanns nicht nach meinen Vorstellungen laufen. Ich habs auch schon mit dem Modul _thread probiert, allerdings klappt es da auch nicht.
Was soll ich machen, damit es funzt? Könnt ihr mir das sagen?? Und was hat es mit dieser Fehlermeldung auf sich
Ich hab folgendes programmiert:
Code: Alles auswählen
import threading as th
import sys
############################################################################## VORBEREITUNG ########################################################################################################################################
sys.setrecursionlimit(90000)
screen=Screen()
turtle=Turtle()
screen.setup(1200,640)
turtle.begin_poly()
turtle.fd(5)
turtle.end_poly()
new=turtle.get_poly()
screen.register_shape("Schuss",new)
speicher=set()
############################################################################## VORBEREITUNG ########################################################################################################################################
#######SchussKlasse
class Schuss(th.Thread,Turtle):
def __init__(self,speicher,instanz):
self.instanz=instanz
th.Thread.__init__(self)
Turtle.__init__(self)
self.speicher=speicher
self.speicher.add(self)
print(self.speicher)
self.pu()
self.shape("Schuss")
self.leben=False
self.speed(0)
self.start()
def spawn(self,instanz):
self.ht() # verstecke Turtle
self.goto(instanz.pos())
self.setheading(instanz.heading())
self.st() # Turtle wird sichtbar
def streckeVor(self):
self.leben=True
self.speed(3)
for i in range(100):
self.fd(1) # Turtle geht um 1 Pixel vor, for schleife deswegen, weil ich nach jedem schuss später noch eine K
# Kollisionsabfragen machen will
def run(self):
self.spawn(self.instanz)
self.streckeVor()
class Spielfigur(Turtle):
def __init__(self,spieler,screen,speicher):
Turtle.__init__(self)
self.speicher=speicher
self.speicher.add(self)
self.screen=screen
self.pu()
print(self,"spawnt an Punkt",self.pos())
if spieler==True:
self.interactive()
def pos_(self):
self.x0=self.xcor()-11
self.y0=self.ycor()-11
self.x1=self.xcor()+11
self.y1=self.ycor()+11
return ((self.x0,self.y0),(self.x1,self.y1))
def fd_(self,distance=1):
self.fd(distance)
self.pos_()
print(self.pos_())
def lt_(self,degree=90):
self.lt(degree)
self.pos_()
print(self.pos_())
def rt_(self,degree=90):
self.rt(degree)
self.pos_()
print(self.pos_())
def bk_(self,distance=1):
self.bk(distance)
self.pos_()
print(self.pos_())
def schuss(self):
schuss=Schuss(self.speicher,self)
def interactive(self):
self.screen.onkeypress(self.fd_,"w")
self.screen.onkeypress(self.bk_,"s")
self.screen.onkeypress(self.rt_,"d")
self.screen.onkeypress(self.lt_,"a")
self.screen.onkeypress(self.schuss,"space")
screen=Screen()
screen.listen()
a=Spielfigur(True,screen,speicher)
Was soll ich machen, damit es funzt? Könnt ihr mir das sagen?? Und was hat es mit dieser Fehlermeldung auf sich