0

tkinter をビジュアライザーとして使用して、Python 2.7 でクリーチャー シミュレーターを実行しています。マップは四角で構成されており、色は土地の種類を表し、赤い四角はクリーチャーを表します。canvas.move を使用して、その赤い四角をボード上で移動します。かなり動かさなければなりません。しかし、私はそれがどこから始まり、どこで終わるべきかを正確に知っています。問題は、移動する代わりに、ほとんどの場合消えてしまうことです。以下のコードでは、Simulation の init で move を呼び出し、動作します。sim.simulate でいつでも呼び出すと、クリーチャーが消えます。誰でも理由を説明できますか?

 class Map():
        def __init__(self,):
            self.root = Tk()
            self.canvas = Canvas(self.root, width=1200, height=1200)
            self.canvas.pack()
            self.colors = {
                "Land": "grey",
                "Food": "green",
                "Water": "blue",
                "Shelter": "black"
            }
            self.canvasDict = {}  # the keys are (x,y, "type"), the data is the id so it can be grabbed for item config.
            for i, row in enumerate(land.landMass):
                for j, tile in enumerate(row):
                    color = self.colors[tile.__class__.__name__]
                    self.canvasDict[i, j, "tile"] = self.canvas.create_rectangle(50 * i, 50 * j, 50 * (i + 1), 50 * (j + 1),
                                                                                 outline=color, fill=color)
                    info = tile.elevation
                    if color == "green":
                        info = tile.vegitation
                    elif color == "black":
                        info = tile.quality

                    self.canvasDict[i, j, "text"] = self.canvas.create_text(50 * i + 3, 50 * j, anchor=NW, fill="white", text=info)
            self.canvasDict["creature"] = self.canvas.create_rectangle(0, 0, 50, 50,
                                                                       outline="red", fill="red")
            self.canvas.pack(fill=BOTH, expand=1)
            sim = Simulation([], 1, 2, self.root, self.canvas, self.canvasDict)
            self.root.after(1000, sim.simulate)

... その他の機能 ...

 def simulate(self):
        self.canvas.move(self.canvasDict["creature"], 1, 1)

        if self.generations > 0:
            self.root.after(10000, self.canvas.move, self.canvasDict["creature"], 2 * 50, 2 * 50)
            ...
4

1 に答える 1

0

私はついに何が起こっているのかを理解しました。オブジェクトをキャンバス上のその場所に移動するという考えを間違え.moveました。代わりに、それだけ移動しています。したがって、私の正方形が「消える」と、実際には目に見えるキャンバスが移動するだけです。.after私はそれが起こるのを見ることができるように動きを止めるだろうと思ったが、明らかにそうではなかった.

于 2013-07-26T22:13:04.413 に答える