よくある質問 (FAQ) 〜てやんでい編〜
おう! Mononotonka の使い方で迷っちまったかい?
ここじゃあ、よくある質問に江戸っ子口調でバシッと答えさせてもらうぜ!
基本・全般 (General)
Ton.Instance.gra と Ton.Gra、どっちを使えばいいんでい!A. Ton.Gra に決まってんだろ!
短けぇことはいいことだ! Ton.Instance なんて長ったらしいもんいちいち書いてられっか! staticプロパティのショートカットを用意してあるんだから、ありがたく使いな!
Initialize を呼び忘れたらどうなるんでい?A. 動くわけねえだろ!
Game1.Initialize の中で Ton.Initialize を呼ぶのは基本中の基本よ! これを忘れちゃあ、お天道様の下歩けねぇぜ!
グラフィックス (Graphics)
A. 使いたい時に使いな!
うちは「ゆるふわキャッシュシステム」採用してんだ。事前のロードなんて野暮なことは言いっこなしだ。描画の直前でもどこでも、Ton.Gra.LoadTexture を呼びな!
既に読んでありゃキャッシュから返すし、なけりゃその場で読んでやるよ!まぁ、各シーンでしか使わねぇやつは各シーンのInitialize()で、どこでも使うやつはGame1のLoadContent()で読んどけば間違いねぇな。
A. びくびくすんじゃねえ!
使わなくなった画像は、キャッシュシステムが勝手に片付け(Unload)てやるよ!
どうしても心配なら、Ton.Gra.MaxTextureMemory で使用量をチェックしな! それでも溢れるようなら、UnloadTexture
で手動で消すなり、キャッシュのタイムアウト時間を調整するなり工夫しやがれ!
A. Ton.Gra.SetScreenFilter を使いな!
セピアだのモノクロだの、洒落た真似もお手の物よ。指定したターゲットだけにかけたりもできるから、ド派手に演出してみな!
複数のフィルタを同時にかける場合は、Ton.Gra.AddScreenFilter を使って追加してやりな!
フィルタが不要になったら、Ton.Gra.ClearScreenFilter を使って消すんだよ!
A. Ton.Gra.DrawEx を使いな!
ただの Draw じゃ満足できねぇってか? 贅沢な奴だな!
DrawEx なら回転角度(ラジアン)も拡縮率も思いのままだ。中心座標を基準にグルグル回してやりな!
A. 自分で探してこい!文句あっか!
ライセンスとかあるからGoogle Fontsとかで自分で探してきて、読み込ませな!
その辺で発売しているフォントは、ゲーム開発用のライセンスが厳しいものが多いから注意な!
フォントをPCにインストールして、Fontフォルダにある.spritefontファイルのFontNameを改変して、MGCB Editorで登録しな!
A. SetAntiAliasing(false) を呼びな!
デフォルトじゃ滑らかにするためにアンチエイリアスがかかってらぁ。
パキッとしたドット絵を見せてぇなら、Initializeのあたりで「アンチエイリアスは結構です」って断りを入れときな!
A. 書いた順に決まってんだろ!
うちの SpriteBatch は Deferred モードだ。先に書いたもんが奥、後に書いたもんが手前だ。
背景を先に描いて、キャラを後に描く。そんな当たり前のことをきっちりやりな!
A. SetBlendState で切り替えな!
TonBlendState.Additive をセットすりゃあ、ピカッと光るぜ!
描き終わったら TonBlendState.AlphaBlend に戻すのを忘れんじゃねえぞ! つけっぱなしだと画面が真っ白になっちまうからな!
DrawBackground ってのは何者だ?A. 画面いっぱいに描くための助っ人よ!
一枚絵を背景にしたい時、アスペクト比を維持したまま画面を埋めるように拡大縮小して描画してやる便利な関数だ。
隙間ができないようにちょいと大きめに描いてやるから、細かいことは気にせず任せな!
A. そりゃあ「エラー」の印だ!
指定したファイルパスが間違ってるか、Contentに追加し忘れてる証拠だ!
ゲームを落とさねぇように代わりにマゼンタの四角を出してやってるんだ、感謝しな! ログにエラーが出てるはずだから、血眼になって探しな!
A. Ton.Gra.Shake で一発よ!
ダメージ受けた時とかに使いな。時間と強さを指定すりゃ、画面全体をガタガタ揺らしてやるぜ。
「地震だ!」ってなもんよ。
A. 商売道具の手入れもできねぇのか!
MonoGameで画像や音を使うには、これで「登録」して「ビルド」しなきゃならねぇ。
Visual Studioのソリューションエクスプローラーにある、拡張子が .mgcb のファイルをダブルクリックすれば立ち上がるはずだ。
そこで使いたいファイルをAddして、ビルドボタンを押しな!
これをやらねぇと、ロードした時にピンク色の四角が出たり、音が鳴らなかったりするぜ!
プリミティブ描画 (Primitive)
A. Ton.Primitive を使いな!
円でも四角でも稲妻でも、テクスチャなしで描き放題だ!
A. updatesPerSecond を設定しな!
最後の引数が 0 だと「時が止まった」稲妻になっちまう。
ここを 60 とかにすりゃ、毎秒60回ビリビリ形が変わるようになるぜ!
A. segments を増やしな!
円や円弧を描くときの引数 segments が分割数だ。
これを増やせばツルツルになるが、増やしすぎると重くなるから程々にな!
サウンド (Sound)
A. 下手な言い訳すんじゃねえ!
Ton.Update は毎フレーム呼んでるか? 音量(MasterVolume)がゼロになってねえか?
そこら辺が間違ってなきゃ、ファイルパスが合ってるか確認しな! 大文字小文字は気にしなくていいようにしてやってるが、ファイル自体がなきゃ音は出ねえぞ!
A. PlayBGM の引数を見てみな!
fadeSeconds って引数があるだろ? そこに秒数を入れれば、今の曲をフェードアウトさせながら新しい曲をフェードインさせてやるよ。粋な計らいってやつだ!
A. ねぇよ!!パンなんか食ってられるか!!
入力 (Input)
A. input.config をイジりな!
「決定」がZキーじゃ気に入らないって? だったら input.config ファイルを作りな! 好きなキーに割り当て放題よ!
ファイルがどこにあるのかわからない?ログに書いてあるぜ!!
A. 慌てるんじゃねえ!
抜けた時は「GamePad Disconnected」、差した時は「GamePad Connected」ってログが出るようになってらぁ。
勝手に再認識して使えるようになるはずだから、落ち着いて差し直しな!
ちなみにゲームパッドは1つしか認識しないから、2つ以上差してても意味はねえぞ!
シーン管理 (Scene)
A. Ton.Scene.Change を使いな!
次のシーンのインスタンスを作って渡すだけだ。
フェードイン・アウトの時間も秒数で指定できる。
Ton.Scene.Change(new NextScene(), 1.0f, 1.0f) ってな具合だ。
真っ暗な中でコッソリ着替えたい時は、フェード時間を長めに取りな!
パーティクル (Particle)
A. Ton.Particle に任せな!
まずは Ton.Particle.Register で「どんな飛び方をするか」を登録するんだ。
速度、寿命、重力、色… こだわりの設定を作りな!
あとは Ton.Particle.Play を呼べば、登録した通りに景気よく飛び散らかしてやるぜ!
セーブ・ロード画面 (Save/Load)
A. 楽しようとしてんじゃねえ! …と言いたいが、用意してあるぜ!!
Ton.SaveLoadMenu.Open を呼ぶだけで、立派なセーブ・ロード画面が開く寸法だ。
TonSaveLoadMode.BothDefaultSave とか指定すれば、セーブ・ロード両対応の画面になる。
Ton.SaveLoadMenu.ExecuteAutoSaveを呼び出すだけでオートセーブのスロットにセーブが行われるぜ!
データは Ton.Data の中身を丸ごと保存するから、大事なもん(変数の値とか)はそこに入れときな!
セーブ・ロード画面がしょぼいと思ったら自分でDraw()を直しな!!自分で直せるのがMononotonkaのいいところだ!!
ロード後にはTon.Data.AfterLoad()が呼ばれるぜ!ロードしたデータの後処理はそこでやるんだぜ!
メッセージ (Message)
A. Ton.Msg があるじゃねえか!
Ton.Msg.LoadScript にスクリプトを渡せば、文字が流れるぜ!!ウィンドウは自分で描きな!!
[wait:10] で待ったり、[color:Red] で色を変えたり、タグを使えば演出も思いのままだ!
メニュー画面 (Menu)
A. この面倒くさがりめ!!Ton.MenuとTonMenuManager があるじゃねえか!
ただな、正直かなり面倒くさいぜ。サンプルコードをいじくり回した方が手っ取り早いぜ!!
自分で作ったほうがいいと思うなら、そうした方がいいぜ!!Mononotonkaのコードを直すのもありだぜ!
コンフィグ画面 (Config Menu)
A. ああもうわかったわかった!Ton.ConfigMenu があるぜ!
Ton.ConfigMenu.Open を呼ぶだけで、必要最低限のコンフィグ項目を含む画面が開くぜ!
自分で作ったほうがいいと思うなら、そうした方がいいぜ!!Mononotonkaのコードを直すのもありだぜ!
ログ (Log)
A. あってもどうせ使わねぇから実装してねぇぜ!
プロパティ (Property)
A. 基本的にユーザーには関数を利用してもらう設計だぜ!
勝手にプロパティを使うのは全然かまわねぇぜ!!
その他 (etc.)
A. バグは教えてくれよな!!それ以外は自分でフォークして作ってくれよな!!
A. 対応したいんだけど、タイルマップ対応したら次はアレじゃん、次はアレじゃん、ってなるじゃん?
マルチレイヤー対応、イベント対応、当たり判定、敵キャラ対応、キャラクターデータ管理、どこまでやるねんってなるじゃん?
対応するかもしれないけど、いつになるかはわからねぇぜ!やっても中途半端になるかもな!