「スーパー新幹線ゲーム」が「Appliv」で紹介されました2023/03/14

Androidアプリ「スーパー新幹線ゲーム」が、
アプリ紹介サイト「Appliv」に掲載されました。



ゲームの基本的な動きや操作方法、コースの種類などが紹介されています。


ゲームのジャンルは、
カジュアルゲーム > カジュアルアクションゲーム > 動体視力・反射神経系カジュアルゲーム > タイミングゲーム
となりました。

ということで、こちらは「タイミングゲームアプリおすすめランキング」です。



新作御祝儀で、今のところ上位に入っています(画像が1位になってるのは、「新作順」でソートしたからなんですが)。



スーパー新幹線ゲーム(旧「新・新幹線ゲームNEO」)2023/02/25

力を溜めて、勢いをつけて新幹線を発車!
下に落ちないように気をつけながら、東京から博多・盛岡まで運行しよう!

駄菓子屋の前なんかで見かける、新幹線に見立てた10円玉を弾いてゴールまで運ぶ「新幹線ゲーム」を元にした物理演算系のゲームです。


Androidアプリ 「スーパー新幹線ゲーム

東海道・山陽新幹線


ゲームアツマール上で発表したゲームでしたが、アツマールが終了するということでAndroidに移植してみました。

東北新幹線

難易度を上げた「東北新幹線」コースを追加しています。

ゲームのコツ

コツというよりは、細かい仕様。

・溜めのキャンセル
新幹線をタッチすると力を溜め始めますが、画面をタッチしたままで新幹線からフォーカスを外すことで溜めをキャンセルすることができます。
動く線路の前でタイミングを間違ってしまったときは、発車をキャンセルしましょう。

・発車方向
新幹線は前方か後方、上を向いている方に発車します。
これはひっくり返ってしまった場合も同じです。また、さかさまの状態でも通常と同様の挙動をします。

・ひとつ戻る
BACKボタンで、最後に正しく駅を発車した態に戻ります。
新幹線がおかしな向きで停まってしまったときは、BACKボタンでやり直した方が無難です。そこから発車して立て直せることもありますが。

アツマール版との差異

「東海道・山陽新幹線」コースは基本的にアツマール版と同じコースですが、物理エンジンの細かい演算の差などによりまったく同じ挙動をするというわけではありません。
また、動く線路に速度を設定することにより動きが自然になっています。
そのためアツマール版での(無茶な)攻略法は使えない場合があります。ご了承ください。

謝辞

画像・BGMに、次の方々の素材を使用させていただきました。

・ゲーム中の画像
いらすとや さん

・アイコン画像
フリーカット さん
ぱくたそ さん

・BGM
フリーBGM DOVA-SYNDROMEより、かずち さん

どうもありがとうございます。



Bevy 0.6 に対応2022/01/13

Rust + Bevyで作成したゲーム「くるんくる~ぱ」を、Bevy 0.6に対応させました。

ブラウザ等、環境によっては動かないかもしれません。

開発プロジェクト(GitHub

ガイドに従えば0.6への移行自体はそんなに難しくはありませんが、0.5で作成した前回の記事で挙げられた点が結構改修されていますので、その辺りを主に並べてみます。


スプライトを半透明にする

SpriteSheetBundleと同じような感じで、SpriteBundleでもカラーのパラメータがSpriteに含まれるようになった。
これで透明度を変えるときでも、Assets<ColorMaterial>を持ち歩かなくて済む。

スプライトの加算合成

AlphaModeなんてのがあったから、これは?と思って見てみたが、どうも2Dのスプライトに使うものでもないらしい。そもそも、ブレンドモードに加算合成が無い……

需要はありそうなもんだが、何か見落としているのだろうか?

テキスト描画

Text2dBundleTransformが、テキストの拡大率や回転角に影響するように変更された。
紹介ページでは、サイズを変えたきゃ「フォントサイズ」を変えることを勧められているけど。

Web対応

標準でWeb対応されて、特にプラグインを入れることなくコマンドオプションだけでWeb用にコンパイルできる。
そのためなのか、それとは別の話なのかはわからないが、Web版のテストにはwasm-server-runnerを使うようになっている。

いくつか注意点があって、wasm-server-runnerではこちらの用意したhtmlを介さないからなのかWindowDescriptorでcanvasを設定すると動かなかった。少なくともデバッグビルドでは設定を外す必要がある。

また同様に、小細工ができないので音が鳴らない。

wasm-server-runnerの設定かなんかでやりようがあるのかもしれないが、致命的な問題でもなかったのでほっといている。

最後に

コンパイル・デバッグの方法の変更でちょっと手間取ったりもしましたが、プログラム自体のBeby0.6への対応は難しくありませんでした。カプセル化されたクラスで変更点を吸収してしまうようなオブジェクト指向型のエンジンに比べると、修正箇所が多いような気もしますが。

スプライトの半透明(カラー)設定なんかは、0.6ですっきりした形になって扱いやすくなりました。むしろ、0.6を待ってからゲームを作り始めていればあんな苦労は……



Rust + Bevyでゲーム作成2021/12/22

何か必要に迫られてというわけではないけれど、
 Rustあたりは触っておいた方が良いかなと、
 ゲームエンジンBevyを使用してミニゲームを作ってみました。

くるんくる~ぱ

くるくるアクションパズル くるんくる~ぱ

ブラウザ等、環境によっては動かないかもしれません。

開発プロジェクト(GitHub


Bevyの基本的な使い方は紹介ページもありますし日本語でもいろいろな所で解説されていますが、実際にゲームを作るとなるとそれ以外にも必要な事が出てきたり様々な問題にぶつかったりもします。
今回の経験から、そういった点をいくつか挙げてみます。


スプライトを半透明にする

 アルファ値(を含めたカラー)を設定するには、ColorMaterialのcolor:Colorを変更する。
 同じ大きさのスプライトを複数まとめたSpriteSheetBundleを使った場合にはTextureAtlasSpriteを持ってきて、そのメンバのcolorを変更すれば良い。
 ただし SpriteBundleでは materialがHandle<ColorMaterial>なので、ResMut<Assets<ColorMaterial>も持ってきてそこからget_mutでColorMaterialを取り出す必要がある。
 SpriteBundleSpriteSheetBundleも似たようなものだと思うのだが、何でやり方が異なるのだろうか?

ちなみにSpriteBundleでもスプライト作成時に設定するのなら、ResMut<Assets<ColorMaterial>>にaddする前に変更してしまえば良い。


スプライトの加算合成

 加算合成を含めた描画モードの変更の仕方だが、結局わからなかった。
 このゲームでは省いても何とかなったけど、エフェクトなど他のゲームではよく使われる手法なのでやり方がわからないと困りそう。


テキスト描画

 テキストの描画はText2dBundleでエンティティを生成

は良いとして、
transformのscaleを変更しても、拡大率が変わらなかった。
何か使い方を間違えているのか、そういうものなのか……


場面の切替え

 タイトル画面からゲームへなど場面を設定して移行する機能で、他のエンジンでは"シーン"などと呼ばれることもあるが、Bevyでは"State"となっている。
 SystemSetで各Stateごとにシステムを登録することによって、動作を切り替えることができるようになっている。

切り替え時には画面も変わるということでそのStateで生成したエンティティなんかを削除してまっさらにして欲しいものだが、それは自前で行う必要がある。
 エンティティをすべてクリアするとか、ある時点の状態に戻すとかそういう機能があれば便利なのだが、そんなのは見つからなかったのでこのゲームでは

State開始時に存在しているエンティティのidを記録しておいて、終了時にそれ以外のエンティティを全部削除

するようにしている。あまりカタギじゃないやり方なので真似しない方が良いかも。
 そのState中で作られるエンティティに目印としての構造体を insertしておくという手もあるが、面倒だし付け忘れても動作はしてしまうのが怖いところ。

また、あるStateから同じStateに直接切り替えることはできない。
 GAME OVERの後、同じゲームStateを最初からやり直したかったのだが、一旦ダミーのStateに切り替えてからすぐにゲームのStateに戻すようにしている。めんどくさいことに。

あとフレーム処理絡みで問題があるのだが、それは次の項で。


フレーム処理

 1秒間に60回とか30回とか、決まった間隔で処理を行う機能。
 ここにあるように、フレーム処理させたいシステムの前に  .with_run_criteria(FixedTimestep::step( 間隔 ))
を差し込むだけ。簡単。

なのだが
 一つ問題があって、これを差し込んだ後のシステムは Stateを無視して実行される(っぽい)。
 他のStateの実行中に、そのStateの初期化部分も通らず繰り返し部分が実行されてしまうので当然エラーになる(むしろエラーで止まってくれて助かった)。

そのために、with_run_criteriaにchainで

 現在そのStateの実行中か

という判定を挟んで対処している。なんなんだ一体。


Web対応

 チートブックには2つのやり方が示されているが、bevy_webgl2_app_templateを使う方を選択。Webに対応するというよりは、Webに対応されたひな型を元にプロジェクトを作るという感じ。

ただ、ブラウザで実行させてみるとちょっと画面が荒い。なぜかサイズが1.2倍に拡大されている。どこかに設定でもあるのかと探してみたが見つからなかったので、プログラム側で対処してみた。

具体的には、

・ウィンドウ生成時のサイズを1.2分の1
 ・カメラのスケールを1.2に
 ・マウスカーソルの座標を1.2倍に

の3ヵ所。


オーディオ再生

 WebではBevyの標準のサウンドシステムは使えないらしいので、ここに従ってbevy_kira_audioを組み込んでみた。
 featuresに"mp3"を含めるとコンパイルエラーが出るけど、どうせoggしか使っていないので他は削除して対処。

ブラウザで実行してみると音が出ない。どうも、Webページではユーザーのアクションがあるまで音を鳴らしてはいけないという規則のせいらしい。
 画面をクリックしても音は出なかったが、おそらくクリック前にオーディオの初期化をしているとかそんな感じなんだろう。よくわからないが。

よくわからないまま、Googleのページのコードをhtmlに張り付けて、無事に音が出るようになった。


この記事について

 いろいろと問題点やその対処法を挙げてみましたが、いかんせんRust・Bevyの初心者が見よう見まねとその場しのぎでゲームを作っただけなので、もっとシンプルでスタンダードな手法があるとか、そもそも何か勘違いしているとか怪しい点もあるかと思います。

この記事はこれからBevyで何かを作ろうとする方ではなく、よくBevyをわかっている方に初心者がつまずく点ということで参考にしてもらえるとありがたいです。




P/ECE ゲームとアプリ2021/09/10

大昔に作ったP/ECEのゲームとアプリ。
なぜだかまだ需要があるらしいので、ここに並べておきます。



反射パズル  いしかり mini

いしかり mini

ダウンロード(Ishikari.zip:42.4KB)

開発プロジェクト(GitHub)



アクションパズル  くるんく・るっぱ

くるんく・るっぱ

ダウンロード(Ruppa.zip:27.6KB)



3Dドライブゲーム  ドライブ風

ドライブ風

ダウンロード(DriveF.zip:29.7KB)



アクションパズル  しかくーる

しかくーる

ダウンロード(Shikaku.zip:31.4KB)



パズルゲーム  よこぎろ

よこぎろ

ダウンロード(Yokogiro.zip:28.2KB)



格闘カードゲーム  よむやも

よむやも

ダウンロード(YomYamo.zip:48.9KB)



パズルゲーム  はんてーな

はんてーな

ダウンロード(Hantena.zip:20.2KB)



パズルゲーム  くるんくる

くるんくる

ダウンロード(Kurun.zip:11.3KB)



占い?  今日の運勢

今日の運勢

ダウンロード(Fortune.zip:7.75KB)