1

私は単純な tkinter ゲームに取り組んでおり、問題が発生しました。画像をクリックしたときに画像を画面上のランダムな場所に移動できるようにしたいのですが、うまくいくと思っていましたが、うまくいきませんでした。以下はコードです:

spr_earth=PhotoImage(file="earth.gif")
x=r.randrange(64,roomw-64)
y=r.randrange(64,roomh-64)

earth=canvas.create_image(x,y,image=spr_earth)
x1,x2,y1,y2=canvas.bbox(earth)


def click(event):
if ((event.x>x1) and (event.x<x2)) and ((event.y>y1) and (event.y<y2)):
    canvas.move(earth,r.randrange(64,roomw-64),r.randrange(64,roomh-64))

root.bind_all("<Button-1>",click)
root.mainloop()

私はこれがうまくいくと思っていましたが、明らかにそうではありません。あなたはそれをクリックすることができますが、それは宇宙にテレポートするように見えます:)

この問題について誰かの意見をいただければ幸いです。ありがとう

4

1 に答える 1

2

ドキュメントを読むと、座標moveは現在の位置に相対的であるように見えます。

おそらく、次のようなものがうまくいくでしょう (警告、このコードはテストされていません):

def click(event):
    if ((event.x>x1) and (event.x<x2)) and ((event.y>y1) and (event.y<y2)):
        canvas.coords(earth,(r.randrange(64,roomw-64),r.randrange(64,roomh-64)))

それだけの価値があるため、次の簡略化されたスクリプトが機能するように見えました。

import Tkinter as tk
from random import randrange

root = tk.Tk()
canvas = tk.Canvas(root,width=400,height=400)
canvas.pack()
image = tk.PhotoImage(file='mouse.gif')

def position():
    return randrange(0,400),randrange(0,400)

mouse = canvas.create_image(*position(),image=image)

def click(event):
    canvas.coords(mouse,position())

canvas.bind('<Button-1>',click)

root.mainloop()

(マウスは常に部分的にキャンバス上に留まりました)。

ここに画像の説明を入力

于 2013-05-23T00:09:06.693 に答える