雨を降らす

今度は雨を降らせてみよう。
基本的には雪を降らすのとあまり変わらない。

まず雨粒の画像を用意する。
と言っても画像の内容は粒ではなく、雨粒が降った時の軌跡のようなもの。

雨粒.png
RainLine


class 雨クラス
{
  method 雨クラス()
  {
  }

  method OnEnter()
  {
    int $number = 0;
    while(true)
    {
      string $name = "雨粒"+String($number++);
      ThreadCreate(call=@雨粒スレッド(name=$name));
      wait 10;
    }
  }

  method 雨粒スレッド(string $name)
  {
    float $angle = 250.0;
    float $move = 2720.0;
    int $x = 450+rand_range(-100, 1280+100);
    int $y = -1000;
    float $rad = radian($angle);
    float $tx = Float($x)+$move*cos($rad);
    float $ty = Float($y)-$move*sin($rad);
    float $scale = 0.2+frand()*0.8;
    int $time = Int(5000.0*(1.0-$scale));

    CreateImage(name=$name
      , x=$x, y=$y, ox="Center", oy="Middle"
      , sx=Percent($scale*2.0), sy=Percent($scale)
      , angle=$angle, image="雨粒.png");
    Enter(to=$name);

    Move(to=$name, time=$time, x=$tx, y=$ty);
    WaitDecor(to=$name);
    Delete(to=$name);
  }
}

method Main()
{
  CreateColor(name="背景", w=1280, h=720, color=black);
  Enter(to="背景");

  CreateObject(name="雨", class=@雨クラス());
  Enter(to="雨");
}
YouTube Preview Image

特徴的なのは角度の計算をしている部分だ。
雨粒の落ちてゆく角度と、雨粒の画像の角度を合わせている。
角度をちゃんと合わせないと雨が直進しているように見えなくなってしまうので注意が必要だ。


Leave a Reply

*