HEDONISTIC PIXEL ART(跡地)

ドット絵・ゲーム開発やってる背教の士です

ゲーム開発ド素人がlove2dライブラリ使ってみた感想

花粉が強くなってまいりました。つれえ。

おかか容疑者です。

 

 

ただいまlove2dにて開発している「ペイガンシューターズ」、更新してないうちに結構いろいろと完成してきており、ゲーム部分やデモ部分あたりはほぼできました🤗

逆に言えば他のUI的な部分はこれからなのでもう一踏ん張りですが、過程は上々なのではないでしょうか(軽率に自分を褒める)。

 

 

そんなわけで今回は、「ゲーム開発ド素人がlove2dライブラリ使ってみた感想」と称して、タイトルの通りにライブラリの感想を軽く語らせてもらおうかと思います。

というのも御存知の通り、love2dというツールはとかく日本語の情報が少ねえんだ!!

とにかく手当たり次第に

github.com

 

↑こういうサイトから必要なライブラリを逐一探して試していました。

こうやって優良なライブラリをまとめてくれているのは非常に助かるのですが、初心者日本人の簡潔な感想もあったらこれからlove2d使ってゲーム作りたいな!って人の役に立つ……かもしれん。

ということは思っていたので、気ままに書いてみまする。

 

 

の前にひとつ。

love2d・luaの学習において特に役立ったサイトだけ先に紹介させてもらいます。

 

・Sheepolution

 

先生です。

love2dの導入から始まり一通り全てのことを丁寧に解説しておられる神サイト。

lua初めての人は読んで。Chromeで日本語翻訳させて読んで。全部。

 

 

・Digitalians' Alchemy

 

こちらは日本語サイトなので日本人にも安心!

後半はかなり専門的な話も書いておられるので、難しい部分はひとまず置いておいて役立つ部分はどんどん拾っていくといいなと思います。

 

 

・公式フォーラム

 

わからねえ事は聞こう!

でえじょうぶだ google翻訳でなんとかなる!!

 

 

 

 

では、以下ライブラリのお話を。

 

 

・hump

 

入れるとなんかいろいろできるようになるすごいヤツ。

ただ、今の作品では「gamestate」のみを使わせてもらっています。

これが使えると、画面(ゲーム画面、タイトル画面、オプション画面など)を別々のluaに書いて、それを自由に移動できるようになります。

もしこういうライブラリがなかったら全部1つのmain.luaに書かないといけないんでしょうかね?自分では管理できそうにないので本当助かってます!

こういうライブラリは他にもあったと思いますがとりあえずhumpでうまいこと使えているのでこれでやっております。

 

画面移動した際に初期化したい変数はenter関数の中に記載しないと初期化されないから気をつけような!!(血涙)

 

 

・vudu

 

デバック用ライブラリ。

入れると実画面を見ながら、どの変数が今どういう値になってるのかなーとかが確認できます。

CF2.5のときはデフォルトでデバック用のウインドウが出てくれましたがlove2dではそういうのはないので自前で何かしら入れる必要がありますね。

 

問題点として、まず重い。

やたらゲーム中にカクつくのでプロファイラ使って調べてみたらコイツ関連のものがえらい呼び出されてました。

デバック用のツールってのは得てしてそういうものなのかもしれませんが必要なときだけ有効にした方がいいなと思います。

 

あとおそらくデバックのデータが描画されているのが画面の一番後ろ?と思われるので、他の画像(背景とか)で画面を描画していると見えませんでした。

 

それとなぜかわかりませんがキーボード入力が半角のときだけ表示されます。

逆に言えば半/全キーを押して全角入力にすると表示が消えるので一時的に消したいときによいです。

 

トータルで言うと微妙では?と感じますが、他にいいライブラリあったら教えて下さい。

 

 

・anim8

 

kikito神が送るつよいライブラリシリーズ。

(神は他に当たり判定を作ってくれるbumpなどを作っておられますが、これは使い方が難しくて今作は未使用です)

 

絵をアニメーションさせてくれるライブラリ。

CF2.5はgifアニメが読み込めて、CF内でアニメーション時間を決めたりできたので、クアッドを作ってその中の画像を指定して~~って形式でアニメーションを作るのは初めてでした。

 

とはいえパパっとできるって感じでもなく、例えば↓こんな感じでnew関数にアニメーションのデータを入れておいて、

    Pimage = love.graphics.newImage("クアッド画像のパス")
    Pwidth = Pimage:getWidth()
    Pheight = Pimage:getHeight()
    --クアッドの切り抜きを変数gに指定。
    g = anim8.newGrid(32,32,PwidthPheight)

    --プレイヤーの動作をanim8を使用して定義。
    Pwalk = anim8.newAnimation(g("1-2",1),0.8)
 

 

↓ draw関数はこんな感じで書いています。

(見やすくするため不要な部分は消してます)

    Pwalk:draw(Pimagexy,0,player_direction,1,16,16)
 
これをPwalk_flagなどでフラグ作っておいて、フラグが真のときにこのアニメーションするよ、って条件作っておくと好きなアニメーションを好きなときに呼び出しやすくてイイなと思いました。
 
文明の利器に慣れた現代人には大変な仕様なのですが、昔から手作業でこういうの作っておられた方には画期的なライブラリなんだろうと思います。anim8なしでアニメーション作るのはきつそう…。
 
 
 
キーボード・ゲームパッドの入力設定ができるライブラリ。
CF2.5はゲームパッド対応させるのがかなり面倒くさかったためこのライブラリがマジで神です。
 
変数に使いたいキー・ボタンを入れて、それが押された場合・押し続けた場合・離した場合で処理を加えるだけなのでシンプルに使えるかと。
他にもいくつかこのようなライブラリがありましたが使いにくかったので、個人的にはbaton一択でいいのではないかと思います!
 
 
 
カメラ移動用のライブラリ。
先のhumpにもカメラ機能は入ってるみたいですが、こちらの解説がわかりやすかったので使ってみてます。
うちのゲームはスクロールしないのであまり活かしきれてませんが、様々なゲームに合わせた移動のさせかたができるのは強みだなぁと思います。
 
このライブラリ単体でカメラの移動だけでなく簡単な画面効果もつけられるため便利です。
コイツのflashを点け続けて画面を暗くし、draw関数のコイツが適応される範囲外に描画をすることで、暗くした画面の上に何かを表示させることもできますね。
 
 
 
オブジェクトにクラスの概念をつけられるライブラリ。
例によってhumpに(ry 
でも先に紹介したSheepolution先生がこれを使えって……誰もこんなに使いやすいなんて教えてくれなかっただろ!俺は悪くねえ!俺は悪くねえ!
 
というわけで、先生が使い方を解説してくださっているのでその通りにやっていけば簡単に継承が使えます。
子クラスはまずnew関数にて最初に親クラスの継承を書き、その下に子クラスで変更したい部分を書けばOKです(最初に変更点を書いていたので親クラスのデータ読み出しで上書きされてた奴)。
複雑なゲームだと弱い部分もあるかもしれませんが、うちみたいに簡単なゲームなら特に問題もなく使えますね。
 
 
 
プロフィール ではなく プロファイル。
どういう処理で負荷かかってるのかがだいたいわかるライブラリ。というか開発環境にはだいたいこういうの付いてるんでしょうね。
 
画面が重くて直したいけどどこ直せばいいのかわかんねえー!ってときに颯爽と登場させるとどいつが犯人かが何となくわかります。
簡単にわかる場合はいいんですけども(例:vudu)、よくわからん場合は処理を見直してこれかな?ってやつをいじっていくしかないんだろうなと。頑張ろう!!
 
 
 
シンプルにスケール(ウインドウのサイズ)を変えてくれるライブラリ。
 
使い方はわかりやすく性能はなかなかいいなと思っています。
ただコイツのせいではないんですが、humpのgamestateを使うと画面が移動する度に画面がいったん閉じてまた開くんですよね。
そのため、画面移動の直前にコイツでいったん元の画面サイズに戻し、移動後画面のenter関数内でまたコイツで拡大する、という処理をしております。
非常に不格好。
 
こういう処理がない形で使えるならクセもなく使いやすいライブラリでないかなと。
 
 
 
セーブデータ作成で役立つライブラリ。
 
lumeは関数ライブラリ、kueyは暗号化ライブラリです(キリッッ
というと難しく聞こえますが、lumeで使うのはシリアライズ(複数のデータを一行にまとめる)とデシリアライズ(シリアライズされたデータを戻す)のみ。
要は「保存したいデータをコンピュータが読みやすい形に変えて、それを暗号化して保存すればよくね?」ということです。
 
lumeでのセーブはSheepolution先生に従い、それを保存前にkueyでひと手間加えれば暗号化でのセーブができました。
まだテストで使ってみただけですが、やってみるとそんなに難しくはないですね(*゚∀゚)
 
 
 
長々と書いてしまいましたが、どこかでなにかの役に立ってくれたら 僕は とても うれしい。
4000字近いからね!?きっちり全部読んだ人いたらえらいよ!?
 
開発も終盤に差し掛かってきましたのでなるはやで完成できるように!マッスル!!💪🏽💪🏽
したらな!!