我有一个具有Arduino输入的处理脚本。
按下按钮,我有一个“成长”的元素。和椭圆3秒然后恢复正常。
我似乎无法解决的问题是如何在3秒钟内忽略按钮的进一步按下。
这是简化代码。
int savedTime;
int growTime = 3000;
void setup() {
//Start counting milliseconds
savedTime = millis();
}
void draw() {
if (arduino.digitalRead(2) == Arduino.HIGH){
//Starts Timer for 'Grow' animation
savedTime = millis();
}
int passedTime = millis() - savedTime;
if (passedTime >= growTime) {
opacity = 10;
if (circleSize > 0){
scale(circleSize);
noStroke();
circleSize -= 0.0009;
}
}else{
scale(circleSize);
noStroke();
circleSize += 0.0003;
opacity = 70;
}
ellipse(0, 0, circleSize, circleSize);
}
据我所知,我目前的代码会检查最后一次按键发生的时间,并且如果我按下按钮,则会有效地查看'增长'效果会继续发射。
如果“成长”,我该怎么做呢?效果正在发生,进一步按下按钮会被忽略?
我希望这是有道理的,而且我已经包含了人们需要理解的内容。它是一个更大的剧本的一部分,所以,如果我错过了一些重要的东西,请原谅!
答案 0 :(得分:0)
您应该以某种方式存储您已经处理上次输入的内容,以便忽略更多点击。
我会使用单独的布尔变量,例如处理,或类似的东西,并在更新上次savedTime之前检查您是否正在处理。 你也可以在没有任何额外变量的情况下使用savedTime上的无效值,但我认为使用额外的变量一切都会很清楚。
bool processing = false;
int savedTime;
int growTime = 3000;
void setup() {
//Start counting milliseconds
savedTime = millis();
}
void draw() {
if (!processing && arduino.digitalRead(2) == Arduino.HIGH){
//Starts Timer for 'Grow' animation
savedTime = millis();
processing = true;
}
int passedTime = millis() - savedTime;
if (passedTime >= growTime) {
opacity = 10;
if (circleSize > 0){
scale(circleSize);
noStroke();
circleSize -= 0.0009;
} else {
processing = false;
}
}else{
scale(circleSize);
noStroke();
circleSize += 0.0003;
opacity = 70;
}
ellipse(0, 0, circleSize, circleSize);
}
没试过代码,所以可能会出现一些语法错误。希望它有所帮助!
编辑:我假设你不想处理任何其他输入,直到椭圆完全减少,如果你想在3秒“增长”之后处理新输入,你可能想要移动{{1}我添加的else块之外的语句。