2017年6月13日火曜日

【Storyboard】雪エフェクト【Storybrew】

難易度: Basic
雪エフェクトの使用例: EMILIA (CV: Rie Takahashi) - Stay Alive

範囲: Move, Scale, for構文, Random

今回はこの譜面で進めていきます。

雪の画像はこちらからどうぞ。


STEP 01.
public override void Generate()
        {
            int number = 200;

     var l = GetLayer("");
            var SnowPath = "SB/dot_0.png";
            var Snow = new OsbSprite[number];

        }

number: 雪の個数を指定。
SnowPath: 雪画像のパスを指定。自分のmapsetに合わせて変更すること。
Snow = New Osbsprite[数]: 同じ画像を複数回用いるときに使う。

STEP 02.
public override void Generate()
        {
            int number = 200;

            var l = GetLayer("");
            var SnowPath = "SB/dot_0.png";
            var Snow = new OsbSprite[number];

            int startTime = 55246;
            int endTime = 76116;

            for (var i = 0; i < number; i++){

                var snowStart = Random(startTime, endTime);
                Snow[i] = l.CreateSprite(SnowPath, OsbOrigin.Centre);
            }

        }

for (---; ---; ---){}: 超重要。適当に解説しているサイトを見ると良い。
int startTime / endTime: 雪の降り始める時間の範囲を指定。
snowStart: startTime~endTimeの間のランダムな数値が入る。これによりそれぞれの雪画像が別々の時間に降り始めるような設定が出来るようになる。
snow[i]: 先ほどforの中身がnumber回繰り返されると説明したが、i値はの1週するたびに1ずつ増えていくため、Snow[0], Snow[1], Snow[2], ...., Snow[199]と同じ役割を果たす。

STEP 03
public override void Generate()
        {
            int number = 200;

            var l = GetLayer(""); 
            var SnowPath = "SB/dot_0.png";
            var Snow = new OsbSprite[number];

            int startTime = 55246;
            int endTime = 76116;

            for (var i = 0; i < number; i++){

                var snowStart = Random(startTime, endTime - 4000);
                var startX = Random(-120, 840);
                var MoveX = Random(-50, 50);
                var FallTime = Random(4000, 8000);
                Double sScale = Random(40, 80); sScale /= 100.0;

                Snow[i] = l.CreateSprite(SnowPath, OsbOrigin.Centre);

                Snow[i].MoveX(snowStart, snowStart + FallTime, startX, startX + MoveX);
                Snow[i].MoveY(snowStart, snowStart + FallTime, -20, 500);
                Snow[i].Scale(snowStart, sScale);

            }

        }


Double sScale: Scaleは小数になるため、varではなくdoubleを使用している。40~80のランダムの数値を生成→100で割るという手順を踏むことで0.01単位の0.40~0.80の範囲のランダムな数値を得ることが出来る。
MoveX: 一直線に落ちてくるだけだと見栄えが良くないため左右の揺れ幅を追加。範囲をRandom(20, 100)のようにすると風が吹いているかのような演出にすることが出来る。


以上で雪エフェクトの作成完了です。

Additiveコマンドを入れるとより綺麗に見えると思います。
自分なりに数値をいじったり、画像を変更したりして是非応用してみてください。




2017年6月12日月曜日

【Storyboard】基礎 導入編【Storybrew】

本記事ではStoryboardの作成ツールである『Storybrew』について解説します。
注意 公式wikiに載っている情報は基本的に省略します。

対象: Storyboardの作成に興味がある方

SBの例

1. 準備編
【必要なもの】
・GIMP2などの画像編集ソフト
・Visual Studio

・論理的思考力
・数学/英語への耐性
・自己解決能力

一通りそろえたらstorybrew公式サイトのGetting Startedの3番まで進めてください。

2. 導入編
今回はこちらの譜面を使用します。


(1). 画像のようにProject Name,  Mapset Pathの設定が終わったらStartを押してください。
(2). Effects > New Script を押し、Script Nameを"Background"にしてください。するとVisual Studio Codeが立ち上がるはずです。
public override void Generate(){}のカッコ内がこれから記入していく部分になります。試しに次のように打ち込んでみてください。
        public override void Generate()
        {
            var layer = GetLayer("TEST");
            var BG = layer.CreateSprite("osu!cysmix-bgtiny.jpg", OsbOrigin.Centre);

        }
次にStorybrewに戻り、右下のLayersを押してみてください。

このように"Script名 1 (test)" と表示されています。ちなみに今の段階では画面には何も映りません。

GetLayer: ()内の名前のレイヤーを作成します。複雑なものを作るときは複数のレイヤーを使用することもあります。
layer.CreateSprite: レイヤー、画像等のファイルパス、重心(OsbOrigin.Centre)を設定します。

(3). BGを画面に表示させます。
public override void Generate()
        {
            var layer = GetLayer("");
            var BG = layer.CreateSprite("osu!cysmix-bgtiny.jpg", OsbOrigin.Centre);

            BG.Scale(0, 960.0/1680);
            BG.Fade(1357, 1785, 0, 1);
            BG.Fade(173214, 173643, 1, 0);
        }
Scale: 画像の大きさを指定する。今回は背景画像の横幅が1680であるから, 数値は960.0/1680と指定すれば良い。
Fade: 画像の不透明度を指定する。2つの時間を設定することで徐々に変化させることが可能。今回の場合は1357ms~1785msにかけて0%~100%, 173214ms~173643msにかけて100%~0%へと変化している。
時間の指定はStorybrewで時間を合わせてctrl+c, ctrl+vで済む。手打ちの必要無し。

これにより、画面に背景画像が表示されるようになりました。
Scale, Fade等の記述方法はこちらを参照してください。→Sprite Methods

(4). Storyboardを出力します。
Storybrewの右下にあるパズルのピースのようなアイコンを押してみてください。これによりosbファイルが作成されます。
Mapsetのフォルダを開き確認してみましょう。


以上で導入編は終了です。