【Defold】画像を読み込んでゲームオブジェクトに適用する。

# はじめに
今回は、画像を読み込んでゲームオブジェクトに貼り付けようと思います。
Atlasとかの基本なのでしっかり覚えておきましょう。

# 画像の用意
まず、フォルダを用意します。
いつもとおなじ Assets を右クリックして、適当なフォルダを作ります。(今回は、images という名前にしました。)
![2021-04-17_19h27_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/6e9563e7-64e4-351d-e96b-6157bb64f1bb.png)
![2021-04-17_19h27_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/7dc9bbbf-8390-922e-66be-9842b333cd53.png)
このフォルダの中に、画像ファイルを置きます。(ドラッグアンドドロップで大丈夫です。)

この記事では長くなるので割愛しますが、画像作成ソフトで適当な画像を作りましょう。
大きさは 32x32 くらいが丁度いいです。僕は[GIMP](https://www.gimp.org/)というソフトを使って作成しました。
　　![lightblue.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/5764914a-da91-4105-a2e1-8c15ed337a46.png)　　![pink.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/f6fe15de-5a1e-426b-c3c9-ecd243cb668f.png)
この◯を使って、ゲームオブジェクトに画像を貼り付ける手順を紹介します。

# アトラスを作る
アトラスの作り方は、いつもと同じなので割愛します。
(フォルダ構造は各々に任せますが、僕は main フォルダの中に、 images.atlas というファイルを作りました。)
![2021-04-17_19h45_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/d5e87787-3d01-6770-cd8f-b18790d45fbf.png)
そしたら、画像の **Add Images...** から、さっき追加した画像を選択します。
(Ctrlを押しながら選択すると、複数選択ができます。)
![2021-04-17_19h46_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/9258cbf2-87a8-06b6-0125-cc62599e97f2.png)
アトラスはこれで完成です。

一応アトラスの説明をしておきます。
![2021-04-17_19h49_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/85b41953-cbce-242b-f575-71880c6ea408.png)
赤枠内がOutlineで選択している Atlas 本体の設定です。 margin や padding など余白の設定をします。
ここらへんを色々いじれば余白を設定したり画像がバグったりしてるのが治ったりします。
![2021-04-17_19h51_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/0c2f7bfa-1064-94ba-aeea-259924929698.png)
こんどは pink の画像を選択してみました。すると、pink の画像の設定が表示されます。
**Id** はファイル名で変更することが出来ません。この名前を後々よく使うので分かりやすいものにしておくといいです。
**Size** は画像サイズで、これも変更できません。 **Sprite Trim Mode** は使ったことがないです。
また、画像を変更したいときは、**Image** から画像を選択すれば、画像を差し替えることができます。

# ゲームオブジェクトにくっつけてみる
**main.collection** を開くと、前回までで使用したゲームオブジェクトがあると思います。
それを右クリックして、**Sprite** を追加します。スプライトが画像を意味しています。
![2021-04-17_19h55_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/432af1bb-34f6-391b-e189-391b0aa9fe0e.png)
スプライトが、アトラスとゲームオブジェクトつなぐ役割を担っています。

作成して、Spriteのプロパティ(設定)を表示すると、Imageというところが、青枠で囲われています。
![2021-04-17_19h56_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/3f424097-5be0-4454-76e3-26d8c6a466cf.png)
これで、アトラスを設定します。(先ほど作成したアトラスファイルを選択してください。)

そしたら、**Default Animation** が赤枠で囲われます。これは、最初に表示されるアニメーション(画像)です。
今回は **lightblue** を選択しておきました。
![2021-04-17_19h58_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/edef4254-1571-72af-e851-098b21a434e4.png)　![2021-04-17_19h59_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/b2a6456b-2c16-7423-75d4-6c66bda2d0f3.png)

これでゲームオブジェクトにアトラスから読み込んでいる画像をくっつけることが出来ました。
F5を押して実行すると、左下に見えると思います。
![2021-04-17_20h02_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/ab358581-0b98-cef0-ad35-aa1225857138.png)

# プログラミングで、ゲームオブジェクトを動かす。
main.collectionの画面でゲームオブジェクトは簡単に動かせるのですが、後々絶対必要になってくるので、プログラミングをしてゲームオブジェクトを移動してみます。

まず、[Luaをいじる](https://qiita.com/nonzu/items/745563bc840c0ae86683)記事でやったスクリプトをいじります。
ゲームオブジェクトを動かすにはこんなコードを使います。

```
go.set_position(vmath.vector3)
```
**go**がゲームオブジェクトで、セットポジションを実行します。**vector3** っていうのは前回やった3次元ベクトルです。
**vmath** っていうのはDefoldで用意してくれる、ベクトルに関するいろいろを司っているものです。
内積を求めたり、絶対値を求めたりするときに、自分で計算式を書かなくても__プログラミングをすれば__、vmathが計算してくれます。

そしたら、function init の中にこれを書いていきます。
(コピペでも良いですが、自分で打ったほうが身につきます。)

```lua
function init(self)
  go.set_position(vmath.vector3(300, 300, 0))
end
```
これで実行すると、ゲームオブジェクト位置が左下から **右に300ドット、上に300ドット** の位置に移動します。
![2021-04-17_20h11_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/4e109ae7-afa7-596e-7126-230e296f943d.png)
ちなみに Z座標は -1~1 の範囲に収めないと、ゲームオブジェクトが見えなくなってしまいます。
また、Z座標は奥行きを表していますが、2Dゲームを作るときには関係がないので **0** と入力すると無難です。

# 画像をピンクに変えてみる
画像の変更は **同じAtlas内の画像** にしかできません。
違うAtlasに入っている画像には変更できないのでご注意ください。

では変更してきましょう。画像を変更するプログラミングはこれです。

```
sprite.play_flipbook("#sprite", "pink")
```
**#sprite"**はこれです。
![2021-04-17_20h18_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/939c3509-aa0e-847c-c7fa-1dedced02e72.png)
**go**(ゲームオブジェクトから見てるので、"/go"は省略できます。)
**pink** は変更したい画像のIDです。

これで実行すると、画像がピンクになると思います。
![2021-04-17_20h20_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620977/d5c7e442-9934-6514-fb86-913fe14d431e.png)

# さいごに
今回は、ゲームオブジェクトと画像について紹介しました。
ベクトルの数値や、いろんな画像で遊んでるとだんだん慣れてくるので楽しみながらいじってみてください。

次回は、キーボード入力で画像を変更するプログラムを作ろうと思います。
[目次](https://qiita.com/nonzu/items/73a39368855f3e1e0f28)