使布尔值快速切换为True和False

时间:2016-10-22 21:45:25

标签: java processing

我目前正致力于一项任务,指出我们必须让一个不断扩大和缩小的圈子变成红色并且闪烁"当我们将鼠标移到它上面时。我对第一部分没有问题,但我在第二部分缠绕时遇到了麻烦。这是我收到的线索"闪烁"(消失并迅速重现):

有很多方法可以做到这一点,例如使用一个名为doDraw的布尔变量来确定是否应该绘制圆。闪烁时,每次都反转这个变量,使其迅速介于true和false之间。当鼠标位于圆圈外时,请始终将此设置为true。

我很难理解这一点,但我相信我必须创建一个布尔函数,它会在true和false之间快速切换?

2 个答案:

答案 0 :(得分:0)

听起来您知道boolean值可以是truefalse。如果您有boolean变量,则可以使用!运算符(称为运算符)来获得与其值相反的值。

boolean x = true;
println(!x); //prints false

您还可以使用!运算符和重新分配来切换boolean变量的值:

boolean x = true;
x = !x; //x is now false

如果您在draw()功能中执行此操作,则每秒会将boolean值切换60次:

boolean drawCircle = !true;

void draw() {
  background(0);

  if (drawCircle) {
    ellipse(width/2, height/2, width, height);
  }

  drawCircle = !drawCircle;
}

fast flicker

实际上可能太快,所以你可以检查frameCount变量来切换它,比方说,每隔10帧:

boolean drawCircle = !true;

void draw() {
  background(0);

  if (drawCircle) {
    ellipse(width/2, height/2, width, height);
  }

  if (frameCount % 10 == 0) {
    drawCircle = !drawCircle;
  }
}

slow flicker

答案 1 :(得分:0)

有几种方法可以解决这个问题。

如果您希望圆圈闪烁不均匀(开,关,关,开,开,关等),您可以使用随机数生成器。

示例:

public static boolean isSolidRandom () throws InterruptedException
{
        while (true)
        {
            TimeUnit.SECONDS.sleep(1);  //This is how fast the flicker changes
            flickerNumber = randomNumGenerator.nextInt(100);
            if(flickerNumber % 2 == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
}

否则,如果您希望圆圈闪烁均匀,您可以从数字X开始并对数字执行操作,每Y时间增量,然后检查数字是偶数还是奇数。

示例:

public static boolean isSolid() throws InterruptedException
{
        while (true)
        {
            TimeUnit.SECONDS.sleep(1);  //This is how fast the flicker changes
            flickerNumber = flickerNumber + 1;

            if(flickerNumber % 2 == 0)
            {
                return true;
            }
            else
            {
                return false;
            } 
        }
}

示例实施:

import java.util.Random;
import java.util.concurrent.TimeUnit;

public class RandomBooleanFunction 
{
    private static int flickerNumber;
    private static Random randomNumGenerator = new Random();

    public static void main(String[] args) throws InterruptedException
    {
        while (true)
        {
            //System.out.println(isSolidRandom()); //Either use this one or 
            //System.out.println(isSolidRandom());   //this one 
        }
    }

    public static boolean isSolid() throws InterruptedException
    {
        while (true)
        {
            TimeUnit.SECONDS.sleep(1);  //This is how fast the flicker changes
            flickerNumber = flickerNumber + 1;

            if(flickerNumber % 2 == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

    }

    public static boolean isSolidRandom () throws InterruptedException
    {
        while (true)
        {
            TimeUnit.SECONDS.sleep(1);  //This is how fast the flicker changes
            flickerNumber = randomNumGenerator.nextInt(100);
            if(flickerNumber % 2 == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}