羽根珈琲 2024/07/01 02:56

制作ノート:4h,(メニュー画面、ステータス画面)_20240627 ~ 0630

メニュー画面編集

メニュー画面というかステータス画面を触りたかった。
結論としてはメニュー画面になったけど…。

ステータス画面

ソースコード読んでて、statusWindow が、メニュー画面のアクター一覧に使われてたりして結構混乱した。ステータス画面のことステータスって呼んでない(?)とか、メニュー画面にもアイテム画面にも装備画面にもステータスウィンドウがあるとか、わけわからん。

  • SceneManager.push()

ここにたどり着くのに結構時間かかった。

Scene_Map.prototype.callMenu = function() {
    SoundManager.playOk();
    SceneManager.push(Scene_Menu);
    Window_MenuCommand.initCommandPosition();
    $gameTemp.clearDestination();
    this._mapNameWindow.hide();
    this._waitCount = 2;
};

SceneManager.push(Scene_Menu);SceneManager.push(Scene_Status); に代えると、メニューボタン(PCの「X」キー)がメニューを表示する代わりにステータス画面を表示するようになる。

う~ん、
メニューコマンド表示して、背景にステータス用の画像を表示して、任意の位置に数値を表示できればいい気がしてきた。

メニュー画面

メニューの背景は Scene_MenuBase.prototype.createBackground で処理されてる。
this._backgroundSprite.bitmap = SceneManager.backgroundBitmap(); の行で背景画像を決定しており、bitmapが代入されている。
画像は ImageManager で管理されているだろうとあたりをつけたら一発で見つけた。

(static) loadBitmap (folder, filename) → {Bitmap}
指定したフォルダ・ファイル名の画像をプロジェクトフォルダ以下から読み込んで返す。

これを Scene_MenuBase.prototype.createBackground() に組み込む。
この関数は以前触っていたようで自作プラグインに入っていた。
なのでそのまま修正する。

Scene_MenuBase.prototype.createBackground = function() {
    this._backgroundSprite = new Sprite();
    //this._backgroundSprite.bitmap = SceneManager.backgroundBitmap(); 
    this._backgroundSprite.bitmap = ImageManager.loadBitmap("img/pictures/", "background"); 
    this.addChild(this._backgroundSprite);
    //メニュー画面のぼかしフィルタ解除、透明度255
    this.setBackgroundOpacity(255);
};

簡単じゃ~んと思ったら、ゲーム起動後のセーブファイル選択画面でも背景画像が表示されるようになっちゃった。

おかしいよ。使いまわしてんじゃねえ。

ステータス画面を調べた時の知見によると、メニューボタンを押した際にはまずScene_Menu.prototype.create が最初に実行されてるっぽい(?)。
Scene_MenuScene_MenuBase を継承しているので、_backgroundSpriteも継承しているはず……?

Scene_Menu.prototype.create = function() {
    Scene_MenuBase.prototype.create.call(this);
    this._backgroundSprite.bitmap = ImageManager.loadBitmap("img/pictures/", "background"); 
    this.createCommandWindow();
    //this.createGoldWindow(); // goldだけ消せる
    this.createStatusWindow();
};

できた!

メニュー画面に画像を表示する

メニュー画面の上にキャラクターの画像とか表示したい。
画像は通常の画像表示($gameScreen.showPicture())とかじゃダメっぽい。

Scene_MenuBase.prototype.createBackground にならう。
ようは

this._backgroundSprite = new Sprite();
this._backgroundSprite.bitmap = 任意のbitmapを代入 
this.addChild(this._backgroundSprite);

これをやればいいんでしょ。
ここの任意のbitmapを可変にするには一工夫必要そうだけど…。
Scene_Menu.prototype.create を再度編集。

とりあえずできた。

課題

  • bitmapを可変にする
  • 任意の位置にパラメータや、ぱためーたに応じたステータス文字を表示

これが自由にできるようになったらあとはデザインとか表示内容をのんびり考えればいいかな。

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索