我目前正致力于一项任务,指出我们必须让一个不断扩大和缩小的圈子变成红色并且闪烁"当我们将鼠标移到它上面时。我对第一部分没有问题,但我在第二部分缠绕时遇到了麻烦。这是我收到的线索"闪烁"(消失并迅速重现):
有很多方法可以做到这一点,例如使用一个名为doDraw的布尔变量来确定是否应该绘制圆。闪烁时,每次都反转这个变量,使其迅速介于true和false之间。当鼠标位于圆圈外时,请始终将此设置为true。
我很难理解这一点,但我相信我必须创建一个布尔函数,它会在true和false之间快速切换?
答案 0 :(得分:0)
听起来您知道boolean
值可以是true
或false
。如果您有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;
}
实际上可能太快,所以你可以检查frameCount
变量来切换它,比方说,每隔10帧:
boolean drawCircle = !true;
void draw() {
background(0);
if (drawCircle) {
ellipse(width/2, height/2, width, height);
}
if (frameCount % 10 == 0) {
drawCircle = !drawCircle;
}
}
答案 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;
}
}
}
}