java中的简单雨算法

时间:2014-03-15 21:28:58

标签: java android canvas

我正在尝试使用canvas在android / java中创建雨动画。

问题是雨后的雨滴走出屏幕,它们重新出现在空中,而不是出现在云中。

我想要的是,它们应该出现在云层中,每排雨滴之间的距离应该保持不变。

然而,在它们离开屏幕后,每行之间的距离会发生变化,并且它们会相互堆叠。

我该如何解决?

counter = 0;

            for (int i = 0; i < 5; i++) {
                for (int j = 0; j < 10; j++) {
                    if(yrain[counter]<c.getHeight()){

                        yrain[counter] = 400+ yAdder[counter] +j*50;
                        yAdder[counter]+=rainSpeed;
                    }else{
                        yAdder[counter]=0;
                        yrain[counter] = 400+ yAdder[counter];
                    }


                    xrain[counter] = 300+ ((50) * i);
                    c.drawBitmap(rain[counter], xrain[counter], yrain[counter],null);

                    counter++;
                }

            }

1 个答案:

答案 0 :(得分:5)

这是我的建议 - 我几年前在需要显示一些情节动画时已经完成了这个:

  • 加倍并重复:假设你的雨从Y10点开始并在Y0结束。然后,您可以生成一个随机矩阵,其下降必须在相对于Y坐标向下移动的位置进行更新。它向上移动到距离(Y10-Y0)x2。

完成此圈子后,例如:

for(step=0;step<(full_cycle_steps);step++)
{    // update Y position downwards  
     perform_animation();
}

然后重新启动重复的动画。

  • 平滑运动:你需要应用相对DSP(数字sinal处理),所以如果你有Y10到Y0,间隔是10个整数,把这个分为100,即10x100会给你1000,正如你正在应用双重和重复的想法,那么你有:10x100x2 = 2000,这意味着一个2000的矢量将在你的画布/图形目标坐标中移动,显示在你的绘图区域(1000)。当然,如果您不需要让下降移动得如此顺畅,您可以使数字x模拟矩阵的数量变小。

在这里您可以找到一些具有洞察力的参考资料:

从这里开始,您应该可以轻松完成雨动画。