2016-01-31 20 views
2
def moveR(amount): 
    global x 
    global y 
    x = x+amount 
    can.itemconfig(player, image = playerImageL) 
    can.move("player", x, y) 
    root.update() 

##SETTING## 

can = Canvas(width = 850, height = 550, bg = "black") 
can.pack(expand = YES, fill = BOTH) 

player = can.create_image(x, y, image = playerImageL, anchor = NW) 
root.update() 

嘿,我想創建一個使用tkinter和畫布的迷你遊戲,但移動命令不起作用。正如你所看到的設置是安裝在後面的代碼我打電話Canvas.Move不工作

moveR(100) 

但它不工作,似乎完全地摧毀我的精靈/圖像。

回答

2

文本"player"和變量player是兩個不同的東西。

使用可變playermove()

can.move(player, x, y) 

BTW:你不需要itemconfig()

+0

哦,順便說一下itemconfig()是針對玩家的不同狀態。 – Treeschapter

-1

你給該對象的標記,這樣的Tkinter知道哪些要移動的對象。與圈子等工作,但從未嘗試過與圖像,但它應該是相同的。 「播放器」可能不在一個範圍內的動作知道。

player = can.create_image(x, y, image = playerImageL, anchor = NW, tag='move_it') 
## and then 
can.move("move_it", x, y) 
+0

這裏不需要標籤。處理項目的Canvas方法採用由'canvas.create_xyx'返回的id或標記。標籤只需要對具有相同標籤的多個項目進行操作。當只有一個項目被定位時,使用'player'作爲第一個參數就可以了。 –

0

請閱讀https://stackoverflow.com/help/mcve。爲了使代碼容易驗證,請使用類似矩形而不是圖像的東西。 (您的代碼在任何物品上都會失敗。)

Canvas.move(item, delta_x, delta_y)將項目移動給定的x和y量。它本身執行x + dy計算,所以你不應該這樣做。如果你想移動到一個給定的位置,使用Canvas.coords(item, x0, y0, x1, y1)。如果新邊界框的大小與它的大小不同,則它也將更改形狀。以下示例使用這兩種方法。作爲獎勵,它還顯示如何使用root.after進行重複更改。

import tkinter as tk 
root = tk.Tk() 
can = tk.Canvas(root, width=800, height=500) 
can.pack() 
rec = can.create_rectangle(0, 0, 100, 100, fill='red') 
def rmove(): 
    box = can.bbox(rec) 
    if box[0] < 700: 
     can.move(rec, 100, 30) 
     root.after(1000, rmove) 
    else: 
     can.coords(rec, 0, 400, 50, 500) # position with new shape 
root.after(1000, rmove) 
root.mainloop()