Python 当我运行程序时,如何开始上课?
我想用一个正方形来创建一个小游戏。当我运行程序时,有人知道如何开始上课吗 这是一节课Python 当我运行程序时,如何开始上课?,python,tkinter,Python,Tkinter,我想用一个正方形来创建一个小游戏。当我运行程序时,有人知道如何开始上课吗 这是一节课 class Player: def __init__(self, event): self.player = self.canvas.create_rectangle(240, 240, 260, 260, fill="blue", outline="dark blue") canvasx = canvas.winfo_width() c
class Player:
def __init__(self, event):
self.player = self.canvas.create_rectangle(240, 240, 260, 260,
fill="blue", outline="dark blue")
canvasx = canvas.winfo_width()
canvasy = canvas.winfo_height()
canvas.bind_all("<KeyPress-Up>", move)
canvas.bind_all("<KeyPress-w>", move)
canvas.bind_all("<KeyPress-Down>", move)
canvas.bind_all("<KeyPress-s>", move)
canvas.bind_all("<KeyPress-Right>", move)
canvas.bind_all("<KeyPress-d>", move)
canvas.bind_all("<KeyPress-Left>", move)
canvas.bind_all("<KeyPress-a>", move)
def move(event):
if event.keysym == "Up" or event.keysym == "w":
canvas.move(1, 0, -5)
elif event.keysym == "Down" or event.keysym == "s":
canvas.move(1, 0, 5)
elif event.keysym == "Right" or event.keysym == "d":
canvas.move(1, 5, 0)
else:
canvas.move(1, -5, 0)
canvas = Canvas(tk, width=500, height=500, bg="silver")
canvas.pack()
这:
不是创建类实例的方式。当您放置Player.\uuuu init\uuuu
时,实际上并不是在调用构造函数。你基本上只是说它存在。与播放器相同。移动。您必须实际调用该方法。将这两行替换为:
playerOne = Player(canvas)
playerOne.move()
def move(event=None):
if event == None:
return
if event.keysym == "Up" or event.keysym == "w":
canvas.move(1, 0, -5)
elif event.keysym == "Down" or event.keysym == "s":
canvas.move(1, 0, 5)
elif event.keysym == "Right" or event.keysym == "d":
canvas.move(1, 5, 0)
else:
canvas.move(1, -5, 0)
现在,playerOne
是Player
类的一个实例
除此之外,Player
构造函数中还有一个问题
def __init__(self, event):
self.player = self.canvas.create_rectangle(240, 240, 260, 260,
fill="blue", outline="dark blue")
引用self.canvas
时,没有self.canvas
。您必须先分配它,然后才能使用它。而且你似乎没有在任何地方使用self.player。我不确定你到底想干什么,但试试这样:
def __init__(self, canvas):
self.canvas = canvas.create_rectangle(240, 240, 260, 260,
fill="blue", outline="dark blue")
然后将move
方法定义替换为:
playerOne = Player(canvas)
playerOne.move()
def move(event=None):
if event == None:
return
if event.keysym == "Up" or event.keysym == "w":
canvas.move(1, 0, -5)
elif event.keysym == "Down" or event.keysym == "s":
canvas.move(1, 0, 5)
elif event.keysym == "Right" or event.keysym == "d":
canvas.move(1, 5, 0)
else:
canvas.move(1, -5, 0)
在你的Player
类之外定义。发布你的完整代码。只有imports和tkinter basics选项缺少Player。\uuuuu init\uuuuu
不调用函数本身,也不直接调用\uuu init\uuu
创建Player
实例的正确方法。在尝试编写自己的类之前,请阅读一本关于Python中OOP的好书。如果您搜索短语“Pygame对象移动”,您将找到比我们在这里的答案更好的资源来解释它。我希望你想要的是一个“精灵”。一个类不是一个可以“启动”的可执行实体:它是一个数据和方法的容器,这些数据和方法共同封装了一个编程概念。您可以调用一个类方法。。。但你需要一个可独立移动的图标。通过更多游戏动画教程学习必要的概念。你有基本的结构;我希望你能很快完成。文件“C:\Users\vitoa\Desktop\tkinter.py”,第12行,在init self.player=self.canvas中。创建矩形(240,240,260,260,fill=“blue”,outline=“深蓝”)AttributeError:“player”对象没有属性“canvas”,你试过运行它吗?