2016-10-22 102 views
-3

我目前正在處理一項任務,指出當我們將鼠標移動到其上時,我們必須將展開和縮小的圓圈變成紅色並且「閃爍」。我對第一部分沒有任何問題,但我在第二部分的時候遇到了麻煩。這是我收到的使其「閃爍」(消失並迅速再現)的線索:使True和False之間的布爾值快速切換

有很多方法可以做到這一點,例如使用名爲doDraw的布爾變量來確定是否應繪製圓。閃爍時,每次都會反轉此變量,以便它快速在真和假之間。當鼠標在圓圈外時,請始終將此設置爲true。

我很難理解這一點,但我相信我必須創建一個布爾函數來快速切換真假。

+1

怎麼樣'B = B'? –

+0

這很有道理,謝謝! – xKorix

回答

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

+0

哇謝謝你!我非常感謝幫助! – xKorix

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; 
      } 
     } 
    } 
} 
+0

請注意,這是一個處理問題,所以這些語法中的一些在處理中沒有多少意義。 –

+0

這是真的,不管這是否有幫助。謝謝。 – xKorix

相關問題