2017-03-02 69 views
1

everyone。我是新手,所以请原谅我的无知。我基本上想根据条件停止注册mouseX。假设我有一个红色区域,并且在该区域内有一个黄色圆圈。当光标在红色区域内时,我希望圆圈跟踪moseX坐标(同时保持y轴位置),但我也希望圆圈在光标离开区域后立即“记住”moseX坐标。根据条件,在处理中停止mouseX跟踪

这里是我试图做的代码:

void setup() 
{ 
    size(500, 500); 
} 

void draw() 
{ 
    background(255); 
    noStroke(); 
    fill(#F05757); 
    quad(0, 0, 300, 0, 300, 200, 0, 200); 
    fill(#EDF057); 
    ellipse(motion(),100,40,40); 
} 

int motion() 
{ 
    int currentXValue = 0; 
    int savedXValue = currentXValue; 

    if (mouseX > 0 && mouseX < 300 && mouseY > 0 && mouseY < 200) 
    { 
    currentXValue = mouseX; 
    savedXValue = currentXValue; 
    } else {} 

    return savedXValue; 
} 

当光标离开红色区域,我不想圆回去X = 0,我希望它保持最后存储的x坐标。我试图让变量currentXValue跟踪mouseX和saveXValue来记住光标离开红色区域时的坐标。

回答

0

您正在draw()循环内创建currentXValue变量,并将其设置为0.然后,只有当鼠标位于红色区域内时才更改该变量。

您需要跟踪currentXValue变量的前一个值。换句话说,你需要定义的变量的motion()功能之外,在草图级别:

int currentXValue = 0; 

void setup() 
{ 
    size(500, 500); 
} 

void draw() 
{ 
    background(255); 
    noStroke(); 
    fill(#F05757); 
    quad(0, 0, 300, 0, 300, 200, 0, 200); 
    fill(#EDF057); 
    ellipse(motion(), 100, 40, 40); 
} 

int motion() 
{ 

    int savedXValue = currentXValue; 

    if (mouseX > 0 && mouseX < 300 && mouseY > 0 && mouseY < 200) 
    { 
    currentXValue = mouseX; 
    savedXValue = currentXValue; 
    } else { 
    } 

    return savedXValue; 
} 

现在currentXValue会调用该函数draw()之间仍然存在。另请注意,您的savedXValue不是必需的。

无耻的自我推销:我已经写了一个关于动画的教程,可在here处理。

+0

非常感谢!这正是我想要做的。我会完全检查你的教程! – Lambientan