2012-01-27 48 views
1

我需要一個替代序列像1,-1,1,-1 ... asf。首先,我使用了if語句,但它是愚蠢的。然後我嘗試了這樣的:尋找一個優雅的方式來獲得±1序列的處理

int n = 1; 
... 
do{ 
    n = 0 + (n * (-1)); 
} while(blabla) 

沒關係,但我必須將n值從迭代存儲到迭代中。這並不漂亮。如何從控制變量中計算該序列,如 frameCount

對不起,我正在學習的不僅是代碼,但也是英語。

+0

自從我看了Processing之後,我已經有一段時間了,但我會給它一個鏡頭。我猜frameCount只是增加每一幀?如果這樣你可以說'n =(frameCount%2 == 0)? 1:-1'即,當frameCount爲偶數時,n爲1;當frameCount是奇數時,n是-1。 – jpm 2012-01-27 20:57:09

回答

2

這不是很可讀,但如果你正在尋找的東西純粹是「優雅」,我想你可以這樣做:

int n = 1 - ((frameCount % 2) * 2); 

如果你在偶數幀你會被減去(1 - 0),如果你在奇數幀,你會減去(1 - 2)。

+0

很好,謝謝! – Daria 2012-01-28 19:10:00

1

爲了增強可讀性,我建議:

int n = (frameCount & 1) == 1 ? 1 : -1;

int n = -1; 
if ((frameCount & 1) == 1) { 
    n = 1; 
} 

(注意:x & 1從提取最低位x就像x % 2一樣)

+0

另請注意,一旦編譯器擊中它,jffrynpmr的解決方案對於機器執行可能會更快,因爲它沒有分支和簡單的操作。 – Kaganar 2012-01-27 21:03:29

+0

感謝您解釋x&1魔法。 – Daria 2012-01-28 19:11:00

1

爲什麼不你只是這樣做

float n = 1 ; 

void setup() { 
.... 
} 

void draw() { 
.... 
n =-n; 
.... 
} 
+0

因爲您正在使用全局狀態變量,應該儘可能避免這種變量。改爲將狀態作爲參考或指針。 – user877329 2014-05-12 06:52:28

相關問題