0

我试图运行此循环两次,然后将状态更改为 1。(状态 = 1;)。那可能吗?

public void mousePressed() {
    if (state == 0) {
        for (int i = 0; i < 6; i++) {
            if (mouseX >= cards[i].x && mouseX <= cards[i].x + cards[i].WIDTH && mouseY >= cards[i].y && mouseY <= cards[i].y + cards[i].HEIGHT) {
                cards[i].flip();
            }
        }
state = 1;
}

现在,当我运行此循环时,它仅运行一次并将状态形式 0 (state==0) 更改为 1。我的问题是我可以让此循环运行两次(按鼠标 2 次)然后将状态从 0 更改为 1(状态=1;)。

非常感谢你。任何帮助,将不胜感激。

4

2 回答 2

2

我收集到您想在第二次执行时更改为状态 1 mousePressed。你需要分裂你的状态。一种方法是引入一个新的状态变量(我们称之为first),用于区分state == 0第一次鼠标单击之前和之后:

private boolean first = true;
public void mousePressed() {
    if (state == 0) {
        for (int i = 0; i < 6; i++) {
            if (mouseX >= cards[i].x && mouseX <= cards[i].x + cards[i].WIDTH && mouseY >= cards[i].y && mouseY <= cards[i].y + cards[i].HEIGHT) {
                cards[i].flip();
            }
        }
        if (first) {
            first = false;;
        } else {
            state = 1;
            // perhaps reset first?
        }
    }
}

第二种方法是允许state采用第三个值,该值在逻辑中的其他任何地方都被视为与状态 0 相同。(从概念上讲,您将拥有状态 0 和 0'。)

于 2013-11-05T20:09:45.880 回答
0

不是 100% 确定你在问什么,是这样的吗:

public void mousePressed() {
    state = 0; /* Assuming it is global */
    while (state < 2) {
        for (int i = 0; i < 6; i++) {
            if (mouseX >= cards[i].x && mouseX <= cards[i].x + cards[i].WIDTH && mouseY >= cards[i].y && mouseY <= cards[i].y + cards[i].HEIGHT) {
                cards[i].flip();
            }
        state++;
    }
}

这将在每次mousePressed调用时运行循环 2 次。切换if_while

于 2013-11-05T20:05:39.110 回答