なでしこを明後日の方向に

日本語プログラム言語なでしこを応援しています

なでしこ3でSpineのアニメを動かす

f:id:tkizzz:20211127115927j:plain

なでしこ3でSpineのアニメを動かすことはできるか? チャレンジ!

別分野のちゃんぽんなので、まず状況を説明。
・メインとなるプログラムは「なでしこ3」
・素材はSpineで作られたファイル(png,atlas,jsonまたはskel)
・素材をロードするためにpixi.jsとpixi-spine.jsをネットから入手
・pixiでSpineのアニメを動かすコードを参考になでしこ3のコードを書く

素材はローカルにダウンロードした「スパインボーイ」を使用する。

かるい解説

「なでしこ3」「Spine」「pixi.js」を全部知っている人、いなさそうなので軽く紹介する

なでしこ3とは何か

何かの間違いで検索で来た人向け。
このブログでは主になでしこ1かなでしこ3のプログラムについて書いている。
なでしこ1は、コードを日本語で書けるプログラム言語。主にwindows上で動く。
なでしこ3は、コードを日本語で書けるプログラム言語。主にブラウザ上で動く。
なでしこ3webkit版はwindows上でブラウザが入っているウィンドウが開く(イメージ)
今回はなでしこ3webkit版(デスクトップアプリ配布パッケージ )を使っていきます。

nadesi.com

Spineとは何か

かんたんに言うと「動く素材作成ツール」
ブラウザゲームのキャラをうごかすのに使われている。

チュートリアルにでてくるのが「スパインボーイ」くん

ja.esotericsoftware.com

Spineでキャラを作り、出来上がったら3つの素材を出力する。
pngファイル (絵)
・atlasファイル(絵をパーツ分けする)
jsonファイルまたはskelファイル (パーツの配置、動き)
一般的にはこれをunityとかpixiとかでロードして、ブラウザ上にゲームのキャラとして表示します。
今回はなでしこ3webkit版のウィンドウに描画させます。

pixi.jsとpixi-spine.jsとは何か

pixi.jsブラウザゲームを作るときに便利なやつ。
javascriptでできていてなんか……便利なやつらしい。
pixiでは「ステージ」に「スプライト」や「コンテナ」を子要素追加することでブラウザに描画することができる……らしい。
詳しいことは知らない。

「ステージ」にSpineの素材を子要素追加するために必要なプラグインが「pixi-spine.js」

PIXIでスパインボーイを描画するサンプルはこちら

pixijs.io

なでしこ3webkit版でスパインボーイを描画する

ここから本編。
なでしこ3のwebkit版をダウンロードして解凍。
webappフォルダの中に移動して……

f:id:tkizzz:20211127115925j:plain

"pixi.js"と"pixi-spine.js"を配置。
assetsフォルダを作って中に"spineboy.atlas","spineboy.json","spineboy.png"を入れます。

[入手場所]

pixi.js
https://pixijs.com/
https://pixijs.download/v4.8.8/pixi.js

・pixi-spine.js
https://github.com/pixijs/spine/tree/pixi4-spine3.8/dist

・assetsフォルダの素材
Spine公式ランタイム
http://ja.esotericsoftware.com/spine-runtimes
https://github.com/EsotericSoftware/spine-runtimes/
spine3.8ランタイムのサンプル素材
https://github.com/EsotericSoftware/spine-runtimes/tree/3.8/examples/spineboy/export

assets/spineboy.atlas
assets/spineboy.png
assets/spineboy.json  (spineboy-ess.jsonをリネームしたもの)

※ バージョンに注意(全部ちょっと古い)
 pixi.js  → pixi4
 pixi-spine.js → pixi4-spine3.8
 spineの素材 → Spine3.8

プログラム

webapp/index.htmlをいじります。
なでしこ3のロードの前にpixi.jsとpixi-spine.jsをロード

~ 上略 ~
</div><!-- #main -->

<!-- ここにpixi.jsとpixi-spine.jsを追加 -->
<script src="pixi.js"></script>
<script src="pixi-spine.js"></script>

<!-- なでしこ3の読み込みコード -->
<script src="./nadesiko3/wnako3.js"></script>
~以下略~

次にwebapp/main.nako3 のプログラムを書き換えします。

pixijsのSPINEサンプルページを再掲

PixiJS v4 Examples

ここにサンプルコードが30行くらいあるので、コピー。
なでしこ3のmain.nako3にどーんと貼り付けして、『』をJS実行…
あ、素材のパスだけ変更します。

//なでしこ3スクリプト
『//ここにコピーしたコードを貼る
const app = new PIXI.Application();
document.body.appendChild(app.view);

// load spine data
app.loader
    .add('spineboy', 'assets/spineboy.json')//変更
    .load(onAssetsLoaded);
 //以下略
』JS実行

なでしこ3からjavascriptをJS実行するだけ (流石にズルいとは思う)
まだ動くかどうかの実験段階だからお許し頂きたい。

nadesiko3.exeを実行して……

f:id:tkizzz:20211127115927j:plain

間違いなくなでしこ3でスパインボーイが表示できている!(実際は動きます)

『なでしこ3でSpineのアニメを動かすことができる』
ことがわかった。

ローカルファイルの素材をロードできている点が偉い。
改良してなでしこ3から素材を操作できるようにしていきたい。

完成品(5.6MB)
http://bugloderunner.g1.xrea.com/junk/nako3spine.zip