Python draw中的Def mouseClicked()不工作,如何修复?

Python draw中的Def mouseClicked()不工作,如何修复?,python,processing,Python,Processing,我制作一个dnd应用程序是为了好玩,char类就是每个角色的类型,但我似乎无法开始工作 我试过注释代码的各个部分,但是init函数似乎有问题 这是我的代码: global mouseY global x x = 0 chars =[] def setup(): global tsize tsize = 50 def draw(): global x if x == 0: def mouseon(x,y,xs,ys):

我制作一个dnd应用程序是为了好玩,char类就是每个角色的类型,但我似乎无法开始工作

我试过注释代码的各个部分,但是init函数似乎有问题

这是我的代码:

global mouseY
global x
x = 0

chars =[]



def setup():
    global tsize 
    tsize = 50    


def draw():
    global x
    if x == 0:
        def mouseon(x,y,xs,ys):
            return(mouseX <= xs and mouseX >= x and mouseY <= ys and mouseY >= y)
        class char:
            def __init__(self, name, HP, img, CLASS, SIZE, id):
                self.xp = 0
                self.yp = 0
                self.SIZE = SIZE
                self.name = name
                self.HP = HP
                self.img = img
                self.CLASS = CLASS
                self.id = id
                self.Hover = False
                chars.append(self)

        dog = char("john", 100, "x.png", "archer", 50, 0)
        print("l") 
        x = 2

    else:
        fill(255)
        background(255)
        stroke(0)
        strokeWeight(1)
        for i in range(height/50):
            for j in range(width/50):
                rect(i*50,j*50,49.5,49.5)
        for i in chars:
            def mouseClicked():
                    if mouseon(i.xp,i.yp,i.xp+i.SIZE,i.yp+i.SIZE):
                        i.Hover = True
                        print('h')
                    else:
                        print("n")
                        i.Hover = False
            def mouseReleased():
                    print("o")
                    i.Hover = False
            if i.Hover:
                fill(0)
                rect(i.xp+1, i.yp+1, i.xp+i.SIZE+1, i.yp+i.SIZE+1)
            fill(0,255,0)
            strokeWeight(0)
            rect(i.xp, i.yp, i.xp+i.SIZE, i.yp+i.SIZE)


全局鼠标
全球x
x=0
字符=[]
def设置():
全球tsize
t尺寸=50
def draw():
全球x
如果x==0:
def鼠标(x、y、xs、ys):
返回(mouseX=x和mouseY=y)
类字符:
def u u init _;(自我、姓名、HP、img、类别、大小、id):
self.xp=0
self.yp=0
self.SIZE=大小
self.name=名称
self.HP=HP
self.img=img
self.CLASS=CLASS
self.id=id
self.Hover=False
附加字符(self)
狗=字符(“约翰”,100,“x.png”,“阿切尔”,50,0)
打印(“l”)
x=2
其他:
填充(255)
背景(255)
笔划(0)
冲程重量(1)
对于范围内的i(高度/50):
对于范围内的j(宽度/50):
rect(i*50,j*50,49.5,49.5)
对我来说,我是恰尔斯:
def mouseClicked():
如果鼠标(i.xp,i.yp,i.xp+i.SIZE,i.yp+i.SIZE):
i、 悬停=真
打印('h')
其他:
打印(“n”)
i、 悬停=错误
def MOUSERRELEASED():
打印(“o”)
i、 悬停=错误
如果i.悬停:
填充(0)
rect(i.xp+1,i.yp+1,i.xp+i.SIZE+1,i.yp+i.SIZE+1)
填充(0255,0)
冲程重量(0)
rect(i.xp,i.yp,i.xp+i.SIZE,i.yp+i.SIZE)
预期结果: 当我按下鼠标,我应该得到h或n打印到控制台,当我释放它,我应该得到o

实际结果: 没什么

编辑: 澄清一下,
每帧调用一次Draw
开始时设置一次
单击鼠标时鼠标单击

当鼠标被释放时,鼠标就会释放。好的,所以我不得不把鼠标点击和释放的函数放在底部,把for循环放在里面,但它解决了我的问题

更新后的代码是

global mouseX
全球老鼠
全球x
x=0
字符=[]
def设置():
全球tsize
t尺寸=50
def draw():
全球x
如果x==0:
全球鼠标
def鼠标(x、y、xs、ys):
返回(mouseX=x和mouseY=y)
类字符:
def u u init _;(自我、姓名、HP、img、类别、大小、id):
self.xp=0
self.yp=0
self.SIZE=大小
self.name=名称
self.HP=HP
self.img=img
self.CLASS=CLASS
self.id=id
self.Hover=False
附加字符(self)
狗=字符(“约翰”,100,“x.png”,“阿切尔”,50,0)
打印(“l”)
x=2
其他:
填充(255)
背景(255)
笔划(0)
冲程重量(1)
对于范围内的i(高度/50):
对于范围内的j(宽度/50):
rect(i*50,j*50,49.5,49.5)
对我来说,我是恰尔斯:
如果i.悬停:
填充(0)
rect(i.xp+1,i.yp+1,i.xp+i.SIZE+1,i.yp+i.SIZE+1)
填充(0255,0)
冲程重量(0)
rect(i.xp,i.yp,i.xp+i.SIZE,i.yp+i.SIZE)
def mouseClicked():
对我来说,我是恰尔斯:
如果鼠标(i.xp,i.yp,i.xp+i.SIZE,i.yp+i.SIZE):
i、 悬停=真
打印('h')
其他:
打印(“n”)
i、 悬停=错误
def MOUSERRELEASED():
对我来说,我是恰尔斯:
打印(“o”)
i、 悬停=错误

对于初学者,您没有调用
draw
,因此该函数的定义中没有任何内容会被执行。draw是一个函数,每60天调用一次second@chepner不,这是,
draw
setup
被自动调用。
mouseClicked
mousererelease
不被调用,因为你没有定义它们。您在
char.\uuuu init\uuuu
的范围内定义了一些同名函数,但系统“找不到”它们,因为您必须在全局命名空间中定义具有此名称的函数。现在,您将函数从
char.\uuuuu init\uuu
的范围内移动到
draw
的范围内。它们仍然不在全局名称空间中。必须与
设置
绘图
处于同一级别。