2016-10-15 4 views
0

私はflappy birdスタイルのゲームを作成しています。そして私の問題は、私は別のdefで作成されたチューブを移動できないということです。 私のコードはPythonのtkinterは、別のdefで作成されたdefの移動オブジェクトです

from tkinter import * 
from random import randint 
window = Tk() 
c = Canvas(window, width=800, height=800, bg='steelblue') 
tube11 = randint(600, 650) 
tube12 = randint(400, 700) 
def createtubes(): 
    tube1 = c.create_rectangle(800, 800, tube11, tube12, fill='green') 
    tube2 = c.create_rectangle(800, 0, tube11, 200, fill='green') 
def automovement(): 
    if True: 
     c.move(tube1, -3.5, 0) 
     c.move(tube2, -3.5, 0) 
    window.update_idletasks() 
    window.after(10, automovement) 
window.after(60, createtubes) 
window.after(10, automovement) 
c.pack() 
window.mainloop() 
+2

はちょうどあなたのcreatetubes機能は、それが作成したオブジェクトを返しています。それらを移動する必要のある関数に渡します。あなたの関数が主に入力に作用して出力を返すならば、一般的にプログラミングが楽になります。 – pvg

+0

また、クラスを作成して、クラス関数が動作するメンバーとして重要な変数を格納することもできます。 – UnholySheep

答えて

1

あなたはまた、あなたの長方形上のタグオプションを使用することができ

from tkinter import * 
from random import randint 
window = Tk() 
c = Canvas(window, width=800, height=800, bg='steelblue') 
tube11 = randint(600, 650) 
tube12 = randint(400, 700) 
class Tubes: 
    def __init__(self): 
     self.createtubes() 
    def createtubes(self): 
     self.tube1 = c.create_rectangle(800, 800, tube11, tube12, fill='green') 
     self.tube2 = c.create_rectangle(800, 0, tube11, 200, fill='green') 
    def automovement(self): 
     if True: 
      c.move(self.tube1, -3.5, 0) 
      c.move(self.tube2, -3.5, 0) 
     window.update_idletasks() 
     window.after(10, self.automovement) 
tube = Tubes() 
window.after(10, tube.automovement) 
c.pack() 
window.mainloop() 
+0

チューブが動かないだけのエラーチューブは印刷されません。 – piuhamies

+0

あなたはどちらを使いましたか?クラス1を使用した場合は、 'tubes = Tubes()'と 'window.after(10、tubes.autoMovement)' – rassar

+0

クラス1を使用しましたが、まだエラーが発生しますtube1はdefiではありません – piuhamies

1

をするクラスを作成してみてくださいです。

tube1 = c.create_rectangle(800, 800, tube11, tube12, fill='green', tags='tube') 
tube2 = c.create_rectangle(800, 0, tube11, 200, fill='green', tags='tube') 

そして、あなたの機能に一つだけの動き:

c.move('tube', -3.5, 0) 
関連する問題