我需要一个替代序列,如1,-1,1,-1 ... asf。首先我使用了if语句,但它很愚蠢。然后我尝试了类似的东西:
int n = 1;
...
do{
n = 0 + ( n * (-1));
} while(blabla)
没关系,但是我必须将迭代中的n值存储到迭代中。这不是那么漂亮。如何从控制变量计算该序列,如 frameCount ?
抱歉,我不仅学习编码,还学习英语。
答案 0 :(得分:2)
它不是很易读,但是如果你正在寻找纯粹“优雅”的东西,我想你可以这样做:
int n = 1 - ((frameCount % 2) * 2);
如果你在偶数帧上你将减去(1 - 0),如果你在奇数帧上你将减去(1 - 2)。
答案 1 :(得分:1)
为了便于阅读,我建议:
int n = (frameCount & 1) == 1 ? 1 : -1;
或
int n = -1;
if ((frameCount & 1) == 1) {
n = 1;
}
(请注意x & 1
提取x
中的最低位,就像x % 2
一样。)
答案 2 :(得分:1)
你为什么不这样做
float n = 1 ;
void setup() {
....
}
void draw() {
....
n =-n;
....
}
答案 3 :(得分:1)
我最近看到了另一种使用异或魔法创建这样一个序列的有趣方法。
int n = -1, t = 1 ^ -1;
...
do{
n ^= t;
}while(blabla);
见于 Algorithms for programmers,第 5 页。
答案 4 :(得分:0)
一种可能是
npm link comp1
在偶数帧上,framecount & 1 将产生 0,然后结果将为 -1。在奇数帧上,framecount & 1 将产生 1,结果将为 1。
或者,在某些架构上不太直接但可能更快,
((framecount & 1)<<1) -1;
frameCount 为奇数时,frameCount^1 等于 frameCount-1,结果为 1。如果 frameCount 为偶数,frameCount^1 等于 frameCount+1,得到-1。