2016-04-19 7 views
0

Ich erstelle gerade ein RPG-Spiel und jetzt möchte ich, dass der Charakter zu bestimmten Orten geht. Wenn es diese Orte erreicht, sollte dieses Fenster schließen und das Ende sollte erscheinen (Es ist in einer anderen Datei). Was ist die beste Methode, das zu tun? Ich habe derzeit das Problem zu überprüfen, dass die Variable, die mir den Zustand eines bestimmten Bereichs eingegeben hat, False ist, wenn es wahr ist, sollte der andere Code ausgeführt werden. HierBeste Methode, um den Status einer Variablen im tkinter-Fenster zu überprüfen

ist, was ich derzeit haben:

class player(object): 
    def __init__(self, x, y): 
     self.root = None 
     self.x = x 
     self.y = y 

    def zeichne(self, root): 
     self.root = root 
     self.l1 = root.create_line(self.x-5, self.y-5, self.x+5, self.y+5, width=2) 
     self.l2 = root.create_line(self.x+5, self.y-5, self.x-5, self.y+5, width=2) 

    def configure(self, x, y): 
     self.root.delete("all") 
     self.x = x 
     self.y = y 
     self.root.create_line(self.x-5, self.y-5, self.x+5, self.y+5, width=2) 
     self.root.create_line(self.x+5, self.y-5, self.x-5, self.y+5, width=2) 

def go_fwd(event): 
    areal.focus_set() 
    me.configure(me.x, me.y-2) 

def go_bwd(event): 
    areal.focus_set() 
    me.configure(me.x, me.y+2) 

def go_left(event): 
    areal.focus_set() 
    me.configure(me.x-2, me.y) 

def go_right(event): 
    areal.focus_set() 
    me.configure(me.x+2, me.y) 

dw = tk.Tk() 
dw.title('Erebos') 

areal = tk.Frame(master=dw, width=20000, height=600, bg='black') 
areal.pack_propagate(0) 
areal.pack(fill=tk.BOTH, expand=bool(dw)-100) 
areal.bind("<1>", lambda event: areal.focus_set()) 
dw.bind("<Up>", go_fwd) 
dw.bind("<Down>", go_bwd) 
dw.bind("<Left>", go_left) 
dw.bind("<Right>", go_right) 

playarea = tk.Canvas(width=800, height=500, master=areal, bg='white') 
playarea.pack() 

dw.mainloop() 

Ich dachte, es nützlich sein könnte, Hintergrundprozesse zu verwenden, aber es gibt so viele Pakete, dass ich wirklich bin verwirrt. Was soll ich hier machen und möchte Hintergrundpaket nutzen?

+0

Also wo überprüfen Sie, ob der Spieler einen Bereich eingibt, und welche Variable bleibt 'falsch' – VRage

+0

Ich habe es noch nicht getan, wie dothat, das ist meine Frage –

Antwort

0

Ich hoffe, ich bekomme Ihre Frage richtig. Sie müssen die Position des Spielers bei jeder Bewegung überprüfen. Ich empfehle Ihnen, Bereiche zu definieren, bei jeder Bewegung (z. B. go_right) müssen Sie überprüfen, ob der Spieler in diesen Grenzen ist. Wenn das True ist, können Sie ein anderes Skript laden. Hier ist eine schnelle und schmutzige Lösung:

def go_fwd(event): 
    areal.focus_set() 
    me.configure(me.x, me.y-2) 
    check_if_player_enters_region(me) 

def go_bwd(event): 
    areal.focus_set() 
    me.configure(me.x, me.y+2) 
    check_if_player_enters_region(me) 

def go_left(event): 
    areal.focus_set() 
    me.configure(me.x-2, me.y) 
    check_if_player_enters_region(me) 

def go_right(event): 
    areal.focus_set() 
    me.configure(me.x+2, me.y) 
    check_if_player_enters_region(me) 

def check_if_player_enters_region(player): 
    ## Define your Areas here 
    if(is_in_region(player, 20, 20, 10, 10)): 
     print "enter region 1, load script xxx" 
    if(is_in_region(player, 50, 50, 10, 10)): 
     print "enter region 2, load script xxx" 

    playarea.create_rectangle(20,20,30,30, fill='blue') ## this is just for visualisation, delete this line 
    playarea.create_rectangle(50,50,60,60, fill='blue') ## this is just for visualisation, delete this line 

def is_in_region(player, x, y, width, height): # define region boundries 
    if((player.x >= x and player.x <= x+width) and ## check x boundries 
     (player.y >= y and player.y-2 <= y+height)): ## check y boundries 
     return True 
    return False 

dw = tk.tk() 
dw.title('Erebos') 

me = player(0,0) 

areal = tk.Frame(master=dw, width=20000, height=600, bg='black') 
areal.pack_propagate(0) 
areal.pack(fill=tk.BOTH, expand=bool(dw)-100) 
areal.bind("<1>", lambda event: areal.focus_set()) 
dw.bind("<Up>", go_fwd) 
dw.bind("<Down>", go_bwd) 
dw.bind("<Left>", go_left) 
dw.bind("<Right>", go_right) 

playarea = tk.Canvas(width=800, height=500, master=areal, bg='white') 
playarea.pack() 
playarea.create_rectangle(20,20,30,30, fill='blue') ## this is just for visualisation, delete this line 
playarea.create_rectangle(50,50,60,60, fill='blue') ## this is just for visualisation, delete this line 
me.zeichne(playarea) 
dw.mainloop() 

ich nur das Zentrum des Spielers überprüfen, normalerweise Sie überprüfen Sie die „Box“ des Spielers.

+0

Nun, das war einfach! Vielen Dank. –

+0

Es ist nicht so einfach, wenn Sie die Grenze des Spielers mit einschließen möchten. – VRage

Verwandte Themen