投稿記事

羽根珈琲 2024/07/07 18:14

制作ノート:4h,(メニュー画面テキスト、状態異常ステート反映)_20240707

タスク

何をしないといけないんだっけ?
あとはシナリオガリガリやるだけ! とかメモしたのは覚えてる。
そう思って今ある分だけプレイしたら、結構足りてなかった。

とりあえず、現在時刻がわからないのが不便なのでこれを表示させる。
あと体力0(内部的には1)になったときのイベントが用意されてないので作る。

↑ わき道にそれたから今日は結局やってない。

マップ上の任意の位置に文字を表示する。(できなかった

任意の位置に文字を表示させるには、まずテキストを表示するWindowを用意してあげる必要があるっぽい。
このWindowSceneに依存するらしい(?)。
タイトル画面はシーン、タイトル画面にある「最初から」とかのボタンはウィンドウ(たぶん)。
メニュー画面もシーン、メニュー画面の「アイテム」とか「ステータス」とかのボタンを表示してるのがウィンドウ(たぶん)。

だとすると、キャラクターをマップ上で操作してるときのシーンに、ウィンドウを追加すればいいっぽい。
で、これってなんのシーンなわけ?
シーン一覧みてもよくわからん。

Scene_Message @MZ
	Scene_Battle (継承位置変更)
	Scene_Map (継承位置変更)

Scene_Mapかな…?

これめちゃむずい。意味わからん。

メニュー画面のステータス

こっちはScene_Menuがわかってるので、こっちのほうが簡単そう。
適当なプラグインの中で、Scene_Menu.prototype.create をオーバライドする。

Scene_Menu.prototype.create = function() {
    Scene_MenuBase.prototype.create.call(this);

	this.任意の関数();
    
    this.createCommandWindow();
    this.createStatusWindow();
};

Scene_Menu.prototype.任意の関数 = function() {
    rect = new Rectangle(100,400,200,250);
    this._mystatus = new Window_Base(rect);
    this._mystatus.drawText("aaaaaa", 10,0,100, "right");
    this.addChild(this._mystatus);
}
 

これでとりあえず任意の文字列が表示できる。
ビジュアルをいい感じに調整するだけ。

調整版。

Scene_Menu.prototype.任意の関数 = function() {
    rx = 50;
    ry = 340;
    rw = 260;
    rh = 350;
    margin = 14;
    rop = 0; //背景と枠を透過。
    this._mystatusWwidth = 250;

    rect = new Rectangle(rx,ry,rw,rh);
    this._mystatus_1 = new Window_Base(rect);
    rect = new Rectangle(rx+rw+margin, ry, rw, rh);
    this._mystatus_2 = new Window_Base(rect);
    rect = new Rectangle(rx+rw+rw+margin+margin,ry,rw,rh);
    this._mystatus_3 = new Window_Base(rect);

    this._mystatus_1.opacity = rop;
    this._mystatus_2.opacity = rop;
    this._mystatus_3.opacity = rop;
    
    this.addChild(this._mystatus_1);
    this.addChild(this._mystatus_2);
    this.addChild(this._mystatus_3);
}

これを状態異常に応じて表示させる。

ステータス画面への状態異常反映

$gameActors.actor(1).isStateAffected(10) とかからステートの判定を持ってきて、
this._mystatus_1.drawTextEx(文字列, 0, 0, this._mystatusWwidth); に反映させるだけ。
数があるから適当にarrayにしてjoin("\n")する。

できた。
このぶんだとほかのメニュー画面も簡単かも。

マップ上にテキスト表示させるのはまだよくわからん。

羽根珈琲 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を可変にする
  • 任意の位置にパラメータや、ぱためーたに応じたステータス文字を表示

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

羽根珈琲 2024/06/27 02:40

制作ノート:5h,(絵、セクハライベント)_20240626

2.5h
とりあえず前回の絵に、服と男の手を書き足して差分を用意した。
適当に描いているはずなのにやたら時間がかかる。

クリスタ3系のレイヤーカンプ機能は差分づくりに便利らしいが、今のところありがたみがわからない。

セクハライベントの実装

2.5h
これまで作ったイベントに、「ここでカットイン」みたいなテキストを入れて目印にしている。
これらの該当箇所で素材が表示されるようにする。

どのレイヤに表示させるか、どれくらいレイヤを確保すればいいか検討した。
イベント用のインナーフレーム等を含めて、20レイヤ程度確保することにした。

次に、表示した画像を全部消すコモンイベントを作成。
$gameScreen.erasePicture (pictureId)
for文で回す。(それでいいのか?)
for (let i=31; i<=50; i++) {$gameScreen.erasePicture(i);}

取り決めたレイヤに素材を描画。

できた。

羽根珈琲 2024/06/26 04:01

羽根珈琲 2024/06/25 03:53

« 1 2 3 4 5 6 7

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索