处理 - 按下按钮按下X键3秒钟 - 忽略按下更多按钮

时间:2014-10-30 22:47:46

标签: javascript timer processing

我有一个具有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);
}

据我所知,我目前的代码会检查最后一次按键发生的时间,并且如果我按下按钮,则会有效地查看'增长'效果会继续发射。

如果“成长”,我该怎么做呢?效果正在发生,进一步按下按钮会被忽略?

我希望这是有道理的,而且我已经包含了人们需要理解的内容。它是一个更大的剧本的一部分,所以,如果我错过了一些重要的东西,请原谅!

1 个答案:

答案 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块之外的语句。