2023-09-18

MZでステータス表示をいじってみたり

Comment ShareLink

こんにちは、烏守です。
ツクールも見ない間にMakerシリーズに名称変更とか、新しくUnity版が出たとか久々にその界隈を覗くと浦島太郎状態でございます。
そのUnityも何やら最近変化があって、収益を出している企業などの利用者さんたちがどうなるのーってざわついているのを見かけました。

色んなものが変化の兆しにありますが、振り回されすぎても疲れてしまうので自分のペースを忘れずにやっていきたいですねー

……とまあ雑談はここまでにして。

現状、烏守は少しずつ休止状態から復帰する準備をしていて、必要なことを箇条書きにしてみたり、ツクールMZをいじってゲームを作るリハビリをしています。
(遊んでるだけとも言える)

前の記事で「またちょっとふざけた感じのRPGつくるかー!」って書いていたやつなんですが。
MZで作り始める際にやってみたかったことがありまして。

「スマホの画面規格で遊んでみたい」

デフォルトの画面サイズだとしっくりこないので、簡単に設定で変えられるのは良いね!と思っていたんですが…
実際やってみると
一応は画面サイズ設定によって一部レスポンシブに表示されるものの、横長だったり縦長だったり、スマホ規格にしようとすると完全に表示が崩れてしまうことが判明。
スマホ画面規格は想定外だったのか、やりたいならスクリプト理解できるようになりなさいってことなのか…

とりあえずJavaScriptなんて初めてで何がどうなってるか右も左もわからないわけで
何がどこでどう動いてるかわからないのはまず不安。

デフォルトのjsファイルをテキストとして開くと一応はわかりやすく区切られていたり、英語で一部だけちょこっと注釈が入ってたりします。
が、以前XPのRGSSを触ってた身としては注釈が少なくてわかりにくい!!!
これは既にJavaScriptをある程度理解してる人向け……!
って感じです。

RGSSどんだけ親切だったの。。。
ここで~処理とかしつこいくらいコメントで説明されてたよ。


とりあえずしらみつぶしに、改造したいステータスの表示とステータスウィンドウ表示の部分をそれっぽいワードでテキスト検索。

見るのは「rmmz_windows.js」にある「Window_Status」項目と
「rmmz_scenes.js」「Scene_Status」の項目

Windowのほうはウィンドウ内に表示されるものの処理
Sceneはウィンドウの呼び出しとサイズや位置の指定をしているようです。
同じく装備画面もStatusではなくEquipにワードをかけると同じような流れで処理されているので、ウィンドウ幅や表示を変えたい時はScene_Equipでテキスト内検索して色々と試してみましょー٩( 'ω' )و
※保存する前にバックアップか変更前の部分を「//」でコメントアウトしておこうね!!!



画面を横向きスマホ規格(ここでは1000×540)で横長・縦短にした場合、上の顔グラフィックやHP・MPなどの表示のあるウィンドウの中身はめちゃめちゃになっているので、配置だけでもどうにかしようと思います。
ウィンドウサイズの処理はここでは置いておいて、さらっと中身の表示を変えてそれっぽく見せるように努めてみます。
ここでは表示範囲が窮屈になるため、TPとあだ名を消して無理やり詰め込んでます(なんでも消すのは簡単…)

Window_Status.prototype.refresh = function() {
 Window_StatusBase.prototype.refresh.call(this);
 if (this._actor) {
  this.drawBlock1();
  this.drawBlock2();
 }
};

これはWindow_Status.prototype.drawBlock1とdrawBlock2をここで呼び出してるわけですね?

で。
…えー…

drawBlock1Y()とdrawBlock2Y()は表示する内容のy座標が別だから分けられてる感じでしょうか???
他に使ってるとこあったっけ、と検索かけてみても引っかからず。
イマイチ分かれてる意味がわからないんで、
これ、このゲーム限りの設定でいいなら直接書いちゃおうか!

Window_Status.prototype.refresh = function() {
 Window_StatusBase.prototype.refresh.call(this);
 if (this._actor) {
  this.drawActorFace(this._actor, 0, -40);
  //▲顔グラ表示。座標を顔の中心に来るようにして無理やりねじこんでる
  this.drawActorLevel(this._actor, 160, 0);
  //▲レベル表示。Lvと数値のスペースはWindow_StatusBase.prototype.drawActorLevelで変える
  this.drawActorName(this._actor, 280, 0, 168);
  //▲名前表示
  this.drawActorClass(this._actor, 280, 32, 168);
  //▲クラス表示
  this.placeBasicGauges(this._actor, 420, 0);
  //▲HPとMPのゲージを表示
  this.drawActorIcons(this._actor, 420, 47);
  //▲ステータスアイコン表示
  this.drawExpInfo(600, 0);
  //▲現在の経験値と次のレベルまでの経験値表示Window_Status.prototype.drawExpInfoで細かい位置を調整

 } };

this.drawBlock1()this.drawBlock2()を消して、ここに必要な項目だけ描画するように入れてみました。
これで位置を変えた実際の画面がこれ。

drawBlock1、2の中にあった主要な描画処理を持ってきて、座標xyを直接指定に変更しただけ。
あとはレベル表示、経験値表示を微調整してます。

これだけで済むなら
drawBlock1、drawBlock2、block1Y、block2Y、drawBasicInfo あたり消してスッキリする気がするんですけど…

仕組みがある程度わかれば消さずに数値だけ変更して調整したり付け足すこともできるので、そこは使う人次第ですね。
色々と試してみないとわからないかも。

毎回ながら、動けばいいか!な付け焼刃ですが、どこで何の処理をしてるかは多少わかったと思うのでこれでヨシとしましょー!


それではまた!

category:

コメントを投稿