da ich noch relativ neu in diesem gebiet bin verbessert mich bzw fragt weiter
Das ganze soll irgendwann einmal ein jump&run spiel werden.
In der Methode try_everything soll getestet werden ob sich der Spieler(roter Kreis) noch nach rechts bzw nach links bewegen darf, oder ob er fällt weil er keinen boden mehr unter den "füßen" hat.
Das funktioniert beim vorwärts bewegen und beim "fallen" recht gut, self.FALL und self.FORWARD haben immer den zu erwartenden wert, jedoch funktionier dies bei self.BACK nicht.
Wenn sich das Objekt dem Kreis annähert und dann irgendwann die rechte obere seite des Kreises (world.coords(self.item)[0]) den gleichen x wert hat wie die obere linke seite eines anderen objekts (world.coords(environment_list.item)[0]) und ein paar andere bedingungen erfüllt sind bedeutet das, dass der kreis sich nichtmehr in diese richtung bewegen darf.
aber alleine diese erste bedingung in z 79 (if world.coords(self.item)[0] == world.coords(environment_list[2].item)[2]: ) wird erfüllt obwohl sie den gleichen wert annehmen, wenn man mehrfach nach links drückt.
Ich nehms keinem übel wenn er das nicht versteht was ich da schreib, aber ich weiß einfach nicht wie ichs erklären soll
Code:
Code: Alles auswählen
from Tkinter import *
from time import *
class Foreground:
def __init__(self,x1,y1,x2,y2):
self.x1=x1
self.y1=y1
self.x2=x2
self.y2=y2
self.BACK=True
self.FORWARD=True
self.FALL=False
self.color="black"
self.fall_counter=0
self.draw_me()
def draw_me(self):
self.item = world.create_rectangle(self.x1,self.y1,self.x2,self.y2,fill="black")
world.itemconfig(self.item, fill=self.color)
def set_fill(self,color):
self.color=color
world.itemconfig(self.item, fill=self.color)
class Player(Foreground):
def draw_me(self):
self.item = world.create_oval(self.x1,self.y1,self.x2,self.y2,fill="black")
world.itemconfig(self.item, fill=self.color)
def go_forward(self,environment_list):
self.environment_list=environment_list
for i in range(len(self.environment_list)):
world.move(self.environment_list[i].item,-5,0)
world.update()
self.try_everything()
def go_back(self,environment_list):
self.environment_list=environment_list
for i in range(len(self.environment_list)):
world.move(self.environment_list[i].item,+5,0)
world.update()
self.try_everything()
def try_everything(self):
x=0
for i in range(len(environment_list)):
if world.coords(self.item)[3]==world.coords(environment_list[i].item)[1]:
if world.coords(self.item)[2]>world.coords(environment_list[i].item)[0]:
if world.coords(self.item)[0]<world.coords(environment_list[i].item)[2]:
self.FALL=False
x=1
if x==0:
self.FALL=True
x=0
for i in range(len(environment_list)):
if world.coords(self.item)[2]==world.coords(environment_list[i].item)[0]:
if world.coords(self.item)[3]>=world.coords(environment_list[i].item)[1]:
if world.coords(self.item)[1]<=world.coords(environment_list[i].item)[3]:
self.FORWARD=False
x=1
if x==0:
self.FORWARD=True
print world.coords(self.item)[0],world.coords(environment_list[2].item)[2]
x=0
for i in range(len(environment_list)):
if world.coords(self.item)[0] == world.coords(environment_list[2].item)[2]:
if world.coords(self.item)[3]>=world.coords(environment_list[i].item)[1]:
if world.coords(self.item)[1]<=world.coords(environment_list[i].item)[3]:
self.BACK=False
x=1
if x==0:
self.BACK=True
print self.FALL,self.FORWARD,self.BACK
def fall(self):
pass
class Environment(Foreground):
pass
def vorwaerts(event):
Mario.go_forward(environment_list)
def rueckwaerts(event):
Mario.go_back(environment_list)
window = Tk()
world = Canvas(window,bg = "white",width=1100,height=600)
world.pack()
environment_list=[]
Mario= Player(500,400,600,500)
environment_list.append(Environment(0,500,10000,600))
environment_list.append(Environment(800,300,900,400))
environment_list.append(Environment(200,400,300,500))
Mario.set_fill("red")
world.bind_all("<Right>",vorwaerts)
world.bind_all("<Left>",rueckwaerts)
window.resizable(width=0,height=0)
window.mainloop()