![見出し画像](https://assets.st-note.com/production/uploads/images/132569793/rectangle_large_type_2_033b0cfe6539f4764ffdf2fabf34f215.png?width=1200)
【復刊】ドット絵にp5.js は添えるだけ[裏ドット絵Advent Calendar 2022]
復刊?
※本記事は消滅した旧自サイトのブログに投稿していた、ドット絵アドベントカレンダー2022 へのエントリー記事の復元になります。
本記事は裏ドット絵Advent Calendar 2022 12月17日の記事となります。
12月17日です、皆さん。そうです。
ロックマンの誕生日です。
![](https://assets.st-note.com/production/uploads/images/132566378/picture_pc_e036fec08188ae2b06b3e404025c4efd.gif?width=1200)
※アニメーションします。生データはこちらで見てください↓
ロックマン、おめでとう。実況動画でしか見たことないけど。去年と同じようなこと言ってんな。
ドット絵 + p5.js = おもしろい、の話
![](https://assets.st-note.com/img/1709283609661-rSggZl8lQg.png?width=1200)
今年のロールちゃんのイラストはp5.js を使いました。
p5.js はJavaScript の一種です。ざっっっっくり言うと、関数のグラフが簡単に描けます。
![](https://assets.st-note.com/production/uploads/images/132567014/picture_pc_59b051ebdeb0159e4be15f3ec5250d68.gif?width=1200)
筆者は今年、ドット絵とp5.js の組み合わせでいろいろ作品づくりをしてきました。ギャラリーにて一部を公開中です。
今回はそのプロセスをちょっとだけお見せします。
グラフをドット絵で置き換える
rect 関数を使うと、ドット(=四角形=rectangle) を打つことができます。
rect(xxspacing, cheight/2scal-yvalues[x], scal, scal);
![](https://assets.st-note.com/img/1709283956989-5yK7jy446I.png?width=1200)
ここではサインカーブに沿って、一定の間隔でドットを表示させました。
このrect 関数の部分を、こんどは画像を表示させるimage 関数に置き換えます。
![](https://assets.st-note.com/img/1709285608853-mGCdm2bwr3.png)
image(imgkoi, xxspacing, cheight/2scal-yvalues[x], 36scal, 15scal);
するとこうなります。
![](https://assets.st-note.com/img/1709284051925-moL7RdH2kr.png?width=1200)
この手法を一部にとりいれてできたのが拙作「だんまりっ子の多動 Noisy DANMARI」です。
![](https://assets.st-note.com/production/uploads/images/132567792/picture_pc_029aae7c94e19073f8be889d2ae61368.gif?width=1200)
キャプチャでない生のアニメーションはこちらで見てください。
(生データで見てもらうのが一番きれいなんですが、なんせ魅せ方が難しいのが…ブツブツ…)
問題点
さて実際にはこのようにアニメーションしているこちらの絵。
![](https://assets.st-note.com/production/uploads/images/132668090/picture_pc_c4e4b525f21ab92b4d647dc2dee7591e.gif?width=1200)
ドット絵としては、動きが滑らかすぎる。
ので、ちょっと重い腰を上げて修正してみます。
滑らかすぎる #とは
どういうことか。停止するとこうでした。
![](https://assets.st-note.com/img/1709284378244-gwFQZCqHXA.png?width=1200)
ドット絵として”ピッタリ”していない瞬間(フレーム)がある、いやむしろどの瞬間にも”ピッタリ”していないオブジェクトがあるのです。
![](https://assets.st-note.com/img/1709284424374-o4mqJcds08.png)
えーと、説明が難しいのでビフォーアフターを見ていただくのが早いです。
解決策
こうなりました。
![](https://assets.st-note.com/production/uploads/images/132569048/picture_pc_0a0f88850c275bd7746e178736d3db3a.gif?width=1200)
sin 関数を使って画像の位置を指定すると、268.49055122208483みたいな中途ハンパな座標になるフレームが出てきます。これが滑らかすぎの原因です。
通常ドット絵では、ドットは整数値の座標の上にしか表示されないはずなのです。
そこでint 関数にsin 関数を咬ませることで、小数点以下を切りすてて座標を整数(=integer) にします。
sin(x) = 268.49055122208483 // 小数点以下があって中途ハンパ
int(sin(x)) = 268 // 小数点以下切り捨て
これなら、いつ停止してもちゃんとドット絵です。
![](https://assets.st-note.com/img/1709285031636-sZxqaqmhKW.png?width=1200)
しかし…
個人的には滑らかなままのほうが好みでした。
最近はHD-2D みたいなものもありますし、滑らかな動きをするドット絵もきっとアリですよね(うんうん)。ドラクエ3のリメイク、待ってます。
滑らかに動くドット絵を作れることはp5.js の醍醐味であることが分かりました。
とか言いつつ…
ただやっぱり滑らかすぎてドット絵らしさを損なうことがあって、冒頭のロールちゃんは当初こんな感じでした。
![](https://assets.st-note.com/img/1709285151403-OuOkoZ8BBS.png?width=1200)
これも同じ手法で座標を整数にすることで、ドット感を出しています。
![](https://assets.st-note.com/img/1709283609661-rSggZl8lQg.png?width=1200)
この改変についてちょーーーっとだけ詳しくZenn にまとめました。↓↓↓
最初からこっちについて詳しく書けば良かったんじゃないの。
やっぱり何事もバランスであるとお茶を濁したところで、現場からは以上です。
余談
昨年のドット絵アドベントカレンダー記事でこんなことを書いていました。
新年の抱負
来年はイラストの仕事にも精を出していきたいと思っています.
思い返せば、縁あってクリエイターとして色々と仕事させてもらうことができました。
なかなかに達成できたと思います。
にゃんたまチャンネル様で保護猫グッズ販売中です。良ければ↑
もうすぐ新たな保護猫支援グッズも出せる予定。
→ 【追記】出ました。こちらもよろしくお願いします。
来年どこでどうしてるか分かりませんが、昨年を踏襲してチェックポイント的に、今年のいま思うところを記しておくと、
何のために描くのか
ということは大事にしていきたい。仕事にするためでは無かったな。描きたいものはあります。
あとは今回紹介したp5.js を使って、もうちょっとジェネラティブアートらしいことをしたいです。のんびりやります。
2月には作品をタイに飛ばします。
↓↓参加予定↓↓
↓ドット絵アドベントカレンダー ウラオモテ