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

相关问题