2016-04-19 6 views
0

私は現在RPGゲームを作成していますが、今ではキャラクターを特定の場所に移動したいと思っています。それらの場所に達すると、このウィンドウが閉じ、Endが表示されます(別のファイルにあります)。それを行う最善の方法は何ですか?私は現在、私に特定のエリアに入った状態を与える変数がFalseであることをチェックし続けるという問題を抱えています。もしTrueであれば、他のコードを実行しなければなりません。ここでtkinterウィンドウの変数の状態を確認する最善の方法

は、私が現在持っているものです。

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() 

私は本当に困惑していることを、私はバックグラウンド・プロセスを使用すると便利かもしれないと思ったが、非常に多くのパッケージがあります。ここで何をすればいいのでしょうか?

+0

だから、プレイヤーがエリアに入っているかどうかチェックして、どの変数がfalseにとどまっているのか – VRage

+0

私はまだそれをやっていない、それは私の質問だよ。 –

答えて

0

私はあなたの質問が正しいことを願っています。移動ごとにプレイヤーの位置を確認する必要があります。エリアを定義することをお勧めします。移動ごとに(たとえばgo_right)、プレーヤーがその境界にいるかどうかを確認する必要があります。それがTrueの場合、別のスクリプトを読み込むことができます。

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() 

私はプレイヤーのセンターを確認するだけで、通常はプレーヤーの「ボックス」にチェックを入れます。

+0

それは簡単だった!ありがとうございました。 –

+0

プレーヤーの境界線も含めたい場合は、それほど簡単ではありません。 – VRage

関連する問題