2012-01-27 6 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

答えて

2

それは非常に読みやすいではありませんが、あなたが何かを探しているなら、純粋に「エレガント、」私はあなたのような何かができるとします

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

あなたがにしている場合でも、あなたが減算されますフレーム(1 - 0)、あなたが奇数フレームであれば、(1-2)を減算します。読みやすさのために

+0

それは素晴らしいです、ありがとう! – Daria

1

、私はお勧め:

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

または

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

x & 1はちょうどx % 2ようxから最下位ビットが行う抽出することに注意してください。)

+0

また、コンパイラがヒットすると、jffrynpmrのソリューションは、分岐や単純な操作がないため、マシン実行の方が高速になる可能性があります。 – Kaganar

+0

x&1の魔法を説明してくれてありがとう。 – Daria

1

なぜドン」あなただけでこれを行う

float n = 1 ; 

void setup() { 
.... 
} 

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

グローバル状態変数を使用しているため、できる限り避けるべきです。代わりに、状態を参照またはポインタとして渡します。 – user877329

関連する問題