我的代码完全符合我的要求,但我不明白为什么。我得到草图开始时调用setup()
一次,但我不确定draw()
和mouseMoved()
。我认为在draw()
之后立即调用setup()
并一遍又一遍地执行,但如果是这种情况,那么mouseMoved()
会在哪里进来?我从来没有打电话给它,但它仍然被执行。如果draw()
正在连续执行,那么mouseMoved()
怎么可能被执行?它们是否同时执行?
float radius = 50.0;
int x, y;
int mx, my;
int delay = 16;
void setup()
{
size(200, 200);
strokeWeight(10);
frameRate(15);
x = width / 2;
y = height / 2;
}
void draw()
{
radius += sin(frameCount / 4);
x += (mx-x)/delay;
y += (my-y)/delay;
background(100);
fill(0, 121, 184);
stroke(255);
ellipse(x, y, radius, radius);
}
void mouseMoved()
{
mx = mouseX;
my = mouseY;
}
答案 0 :(得分:3)
就像你说的那样,程序启动后会调用setup()
一次。它设置一切。然后默认情况下,draw()
被调用60次。根据{{3}}:
在setup()之后直接调用,draw()函数连续执行 执行其块内包含的代码行,直到 程序停止或调用noLoop()。调用draw() 自动,绝不应该明确调用。
mousePressed()
和mouseMoved()
等事件会在draw()
函数中自动连续调用。
每个草图只能有一个draw()函数,而draw()必须 如果您希望代码连续运行或处理事件,则存在 例如mousePressed()。
现在,mouseMoved()
执行以下操作(链接documentation):
每次鼠标移动时都会调用mouseMoved()函数 未按下鼠标按钮。 (如果按下按钮, 而是调用mouseDragged()。)
draw()
是持续监听事件以查看鼠标是否移动的内容。如果鼠标移动,那么该事件将发送到mouseMoved()
并执行其中定义的内容。
如果您想测试某些功能的调用方式,请在noLoop()
中放置draw()
,然后您就会看到mouseMoved()
未被调用。您还可以使用draw()
更改frameRate()
在一秒钟内调用的次数(请参阅here)。