Java 使用我自己的舞台系统进行处理时颜色转换闪烁

Java 使用我自己的舞台系统进行处理时颜色转换闪烁,java,animation,processing,Java,Animation,Processing,我正在试验处理,我为我的项目编写了一个非常简单的阶段系统。我有三个阶段: 0-持续2秒,灰色屏幕 1-持续1秒,从黑色过渡到白色 2-持续2秒,从白色过渡到黑色 第1阶段和第2阶段反复重复,有时在任一阶段的最后一帧和下一阶段的第一帧之间,屏幕会闪烁(我想你自己会看到) 我知道我在某个地方犯了一个愚蠢的错误,我只需要找出其中的位置:)设置背景时,这似乎与你除以整数有关。让他们漂浮似乎可以解决问题。。。因此,在开关(子状态)的intro()中{ 而不是 background((millis() -

我正在试验处理,我为我的项目编写了一个非常简单的阶段系统。我有三个阶段: 0-持续2秒,灰色屏幕 1-持续1秒,从黑色过渡到白色 2-持续2秒,从白色过渡到黑色

第1阶段和第2阶段反复重复,有时在任一阶段的最后一帧和下一阶段的第一帧之间,屏幕会闪烁(我想你自己会看到)


我知道我在某个地方犯了一个愚蠢的错误,我只需要找出其中的位置:)

设置背景时,这似乎与你除以整数有关。让他们漂浮似乎可以解决问题。。。因此,在开关(子状态)的intro()中{

而不是

background((millis() - counter) * 255 / 1000);


我已经设法解决了我的问题

void intro() {
    System.out.println(substate);
    switch (substate) {
    case 0:
        setSubState(2000, 1);
        break;
    case 1:

        setSubState(1000, 2);
        if (substate == 1) {
            background(calc(1000, 256));
        }

        break;
    case 2:

        setSubState(2000, 1);
        if (substate == 2) {
            background(256 - calc(2000, 256));
        }

        break;
    }

}

int calc(int max, int val) {
    int r;
    if ((millis() - counter) > max) {
        r = val;
    } else {
        r = (millis() - counter) * val / max;
    }
    System.out.println(r);
    return r;

}

void setState(int ms, int s) {
    if (millis() >= counter + ms) {
        state = s;
        counter = millis();
    }
}

void setSubState(int ms, int s) {
    if (millis() >= counter + ms) {
        substate = s;
        counter = millis();

    }

}

使用非标准API不会帮助用户回答您的问题……它不会改变任何事情
background(255 - (millis() - counter) * 255 / 2000);
background((millis() - counter) * 255 / 1000.0);
background(255 - (millis() - counter) * 255 / 2000.0);
void intro() {
    System.out.println(substate);
    switch (substate) {
    case 0:
        setSubState(2000, 1);
        break;
    case 1:

        setSubState(1000, 2);
        if (substate == 1) {
            background(calc(1000, 256));
        }

        break;
    case 2:

        setSubState(2000, 1);
        if (substate == 2) {
            background(256 - calc(2000, 256));
        }

        break;
    }

}

int calc(int max, int val) {
    int r;
    if ((millis() - counter) > max) {
        r = val;
    } else {
        r = (millis() - counter) * val / max;
    }
    System.out.println(r);
    return r;

}

void setState(int ms, int s) {
    if (millis() >= counter + ms) {
        state = s;
        counter = millis();
    }
}

void setSubState(int ms, int s) {
    if (millis() >= counter + ms) {
        substate = s;
        counter = millis();

    }

}