手紙
文字のアニメーションについて説明します。 彼は私にとって複雑さの最初の対象になりました。 アニメーションのコンセプトは、植物のように成長することでした。 私は文字をいじくり回さなければなりませんでした。誰もがIllustrator(私を含む)での作業方法を知っているとは限りません。 そして、これで経験を積んだ人として、私はアドバイスします:
- エディターの後には常にsvgコードを削除してください。
- クラスの名前を一意に変更します
- 余分なレイヤーを削除することを忘れないでください。
合計時間の60%を、同期、座標の調整、個々の線の描画(標準的な数値では模倣できない)のみに費やしました。 良い効果を得るには、1つのパラメーターを20回変更する必要がありました。 しかし、私の内なる完璧主義者は時間をかけて妥協し、あきらめました。
コードのレビューは簡単です:
...that.plant_D(800, 10111), ...that.plant_A(800, 10200), ...that.plant_R(800, 10300), ...that.plant_N(800, 10400), ...that.plant_E(800, 10500), ...that.plant_O(800, 10600), ...that.plant_S(800, 12500), ...that.plant_T(800, 13100), ...that.plant_U(800, 13400), ...that.plant_D2(800, 13700), ...that.plant_I(800, 14000), ...that.plant_O2(800, 14300)
私が出会った2番目のことは、マニュアルを読むことに対する私たち自身の無知であり、私たちは皆、ある程度これに苦しんでいます。 独自のsvgブランクを100x100の解像度にする必要があり、最初の文字「D」が間違っているという点を見逃したのは気の毒です。 そしてもちろん、そのような場合、私たちは常に松葉杖を作ります。 初期化後にサイズを変更しただけです(バーストオブジェクトを使用したため、一度にすべての子孫を変更する必要があります)。
for (let el of equal.el.children) { el.style['height'] = '180px'; }
後で、GitHubで質問をしましたが、これはマニュアルの流行で突かれました)
独自のsvgトレースが追加されます。 方法:
class elipceR2 extends mojs.CustomShape { getShape () { return '<path d="M0,120.5h13.9c39.6,0,59.6-30.6,59.1-61C73,29.8,52.8-0.2,13.3,0L0.1,0"/>'; } getLength () { return 200; }
追加および使用(すべてがシンプル):
mojs.addShape( 'elipceR2', elipceR2'); new mojs.Shape({ shape: 'elipceR2'});
または、デフォルトのsvg-shapesを使用します。
星
2番目に難しいオブジェクト。 これは、エフェクトを「Bun Family」の音楽カットと同期させるためのメインソースになりました。
星の配列をいくつか作成し、与えられた瞬間にそれらを取り出し、同時にそれらをオブジェクトのコンテキストに投げて、色、サイズ、および座標をさらに操作しました。
パラメータは、アニメーションの時間、開始、星の数です。
that.curentStars = [ ...that.star(200, 17050, 5), ...that.star(200, 17300, 15), ...that.star(200, 17600, 25), ...that.star(200, 17900, 30), ...that.star(200, 18200, 35), ];
ライブラリツールでsvgをどうにかぼかしることはできませんでした。 いつものように、アニメーションの長さ、その開始、ランダムに取る星の数、配列、
that.shineStars(10, 21200, that.curentStars, 3); that.shineStars(10, 21600, that.curentStars, 3); that.shineStars(10, 21900, that.curentStars, 3); that.shineStars(10, 22100, that.curentStars, 4); that.shineStars(10, 22400, that.curentStars, 4); that.shineStars(10, 22700, that.curentStars, 4); that.shineStars(10, 23300, that.curentStars, 10); that.shineStars(10, 23900, that.curentStars, 15); that.shineStars(10, 24500, that.curentStars, 12); that.shineStars(10, 25150, that.curentStars, 9); that.shineStars(10, 25700, that.curentStars, 6); that.shineStars(10, 26300, that.curentStars, 7); that.shineStars(10, 26600, that.curentStars, 4); that.shineStars(10, 27200, that.curentStars, 8); that.shineStars(10, 28170, that.curentStars, 3);
同時にthis.curRimShineStarをプロパティに投げ込みます。
星をランダムに選択すると、星が動き始めるはずの座標までの距離が非常に短い場合があります。 そしてその結果、私はちょうど下降点を見ました。 正しいゾーンの座標で配列をフィルタリングすることで、より長いアニメーションを実現し、星の後ろに尾を表示しました。
that.shootingStar(500, 29600, {y: 52, x: PARAMS.COORDINATES_X.str1.D}); that.shootingStar(500, 29800, {y: 52, x: PARAMS.COORDINATES_X.str1.A}); that.shootingStar(500, 30100, {y: 52, x: PARAMS.COORDINATES_X.str1.R[0]}); that.shootingStar(500, 30400, {y: 52, x: PARAMS.COORDINATES_X.str1.N[0]}); that.shootingStar(500, 30700, {y: 52, x: PARAMS.COORDINATES_X.str1.N[1]}); that.shootingStar(500, 31070, {y: 52, x: PARAMS.COORDINATES_X.str1.E}); that.shootingStar(500, 31370, {y: 52, x: PARAMS.COORDINATES_X.str1.O});
オブジェクト内のパラメーターの場所に関する詳細の欠如に非常にがっかりしましたが、すべてをコンソールに出力し、ソースを読み取ることによって決定されました(長いが、常に保証された結果)。 オブジェクトを操作した後、オブジェクトがいつアニメーションを完了するかを知る必要がありましたが、Object.timeline._props.timeプロパティがそれを示していることをすぐには理解できませんでした。最初にObject._oで探しました
もちろんどこかで、私はコードをだましました。 しかし、全体的にアニメーションは素晴らしかったです。