gpt4 book ai didi

c++ - 动画到数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:13:14 24 4
gpt4 key购买 nike

我有一个 Arduino,我正在尝试找到最有效的方法来为数组中的像素设置动画。该数组由 3 个 30 个 uint8_t 的数组表示。 (30 像素 * R+G+B 级别 0-255)。

将像素独立地向下移动阵列的最佳方法是什么?这是一个内存有限的环境(2 KB RAM),数组占用 720 字节。我最初尝试为每个像素使用一个数组,但内存不足。第二种实现使用 if 语句,效果很好,但创建新模式非常繁琐。我正在寻找一种解决问题的方法,它可能比我现在的解决方法更好。

这是我想要制作动画的模式示例。

X moves forward 1 each cycle.
Y moves forward 3 places then back 2.
Z moves backwards 3 places each cycle.

|_|X|_|_|_|_|_|_|_|_|_|_|_|_|Y|_|_|_|_|_|_|_|_|_|_|_|_|_|_|Z|
|_|_|X|_|_|_|_|_|_|_|_|_|_|_|_|_|_|Y|_|_|_|_|_|_|_|_|Z|_|_|_|
|_|_|_|X|_|_|_|_|_|_|_|_|_|_|_|Y|_|_|_|_|_|_|_|Z|_|_|_|_|_|_|

这是我要使用的代码。

void animateScene1() {
for(int i = 0; i <= numPixels; i++) {
setColor(i, X);
if(i < 15) {
if(i % 2 == 0)
setColor((i+15)+3), Y);
else
setColor((i+15)-2), Y);
}
if(i < 10)
setColor(numPixels-3*i, Z);
}
}

有更好的方法吗?

最佳答案

这样的函数怎么样?

int pixelAt(int index, int min, int max, int a, int b, int b_2)
{
int pixel = -1;

if (min <= index && index <= max)
{
pixel = a * index + b;
if (i % 2)
{
pixel += b_2;
}
}

return pixel;
}

那么你会:

for (int i = 0; i < numPixels; i++)
{
// This assumes setColor(-1, x) does nothing
setColor(pixelAt(i, 0, numPixels, 1, 0, 0), X);
setColor(pixelAt(i, 0, 15, 1, 18, -5), Y);
setColor(pixelAt(i, 0, 10, -3, numPixels, 0), Z);
}

当然,pixelAt 函数会变得复杂得多,如果您添加新的要求,例如更改偶数的乘法因子,以不同方式处理 3 的倍数等。但是,您可以使用类似于这个的功能,以减少您必须编写的功能数量。一种用于简单模式,一种用于偶数/奇数模式,一种用于三的倍数,等等。取决于模式的不同程度,以及您有多少内存空间用于代码。

关于c++ - 动画到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4776231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com