メニュー画面構成について※複数の質問です

返信する
アバター
sairi
記事: 105
登録日時: 2016年2月05日(金) 16:37
連絡する:

メニュー画面構成について※複数の質問です

投稿記事 by sairi »

何時もお世話になっております。
AltMenuScreen3.jsを弄って勉強しているJavaScriptを触り始めて1ヶ月経ってない者です。
複数の質問があるのですが、

一つ目は新しく自分でウインドウを作って情報を表示させたいと思って以下のコードでウインドウを作って
マップの「表示名」を表示させる所までは出来たんですが、マップ毎にアイコン的な画像を置きたいと思って
マップの設定のメモを使ってDrawで出来ないかなと画策したのですがどうしても
方法が分からずお力を借りたい所存です。

二つ目は立ち絵と立ち絵の隙間の設定がどうしても出来なくて、textPaddingでもstandardPaddingでも
無かったので、CSSで云うmargin的なものがあるのだろうと思われますが、
ネットで検索してもCSSやHTMLばかりで困っています。

三つ目は道具を使った時に「誰に使うか」で出るステータス画面(ActorWindowだと思われます)が
Graphics.boxWidth以外でウインドウの幅を指定してある時左右に動くのを固定させたいです。

以上、こういう書き方で良かったのかも分からないのですが、宜しくお願いします。
長文、乱文失礼しました。勉強不足で済みません。

コード: 全て選択

//インフォメーションウインドウの作成------------------------------------
     this.createInformationWindow();
    };   
    Scene_Menu.prototype.createInformationWindow = function() {
	    this._informationWindow = new Window_Information();
	    this.addWindow(this._informationWindow);
	};    
    var _Scene_Menu_update = Scene_Menu.prototype.update;
    Scene_Menu.prototype.update = function() {
        _Scene_Menu_update.call(this);
        // インフォメーションウィンドウの更新
        this._informationWindow.setText();
    };    
    //-----------------------------------------------------------------------------
	// Window_Information
	function Window_Information() {
	    this.initialize.apply(this, arguments);
		this.opacity = 0;
	}

	Window_Information.prototype = Object.create(Window_Base.prototype);
	Window_Information.prototype.constructor = Window_Information;
	Window_Information.prototype.initialize = function() {		
    Window_Base.prototype.initialize.call(this, 100, 527, 300, 70);		
	};
	Window_Information.prototype.setText = function(text) {
	        this.refresh();
	};
	Window_Information.prototype.refresh = function() {
	    this.contents.clear();
		// マップ名、多分ここにアイコンつけるコードが入るかな?
		this.drawText($gameMap.displayName(), 0, 0, 280, 'left');	
アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡する:

Re: メニュー画面構成について※複数の質問です

投稿記事 by トリアコンタン »

こんばんは。
とりあえず一つ目のご質問に回答いたします。
ウィンドウ内にアイコン画像を表示するには、「Window_Base.prototype.drawIcon」というメソッドを使えば簡単に表示できます。
使い方はdrawTextを使えているのであれば問題ないと思います。

マップごとに異なるアイコンを表示させたい場合、まずはマップの編集画面のメモ欄に「<icon:128>」と記入しましょう。
128はアイコンインデックスの値です。

メモ欄の記入の仕方はきちんとした法則があって「<名前:値>」と書きます。
そして参照するときは「$dataMap.meta.(名前)」で参照できます。
上の例の通りに定義したのであれば「$dataMap.meta.icon;」と記述すると、値である「128」が取得できます。

さらにいくつか注意点があります。

1.取得した値は文字列型なので数値に変換する必要があります。
2.アイコンのぶんだけマップ名の表示位置を右にずらす必要があります。
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
アバター
sairi
記事: 105
登録日時: 2016年2月05日(金) 16:37
連絡する:

Re: メニュー画面構成について※複数の質問です

投稿記事 by sairi »

トリアコンタン様
Twitterの方でもお世話になっております。
ええと、済みませんこの様なお返事を返す事になって大変心苦しいのですが
私WEB上に例題が無いもの、まして説明もない上改変した例すら無いとなるとさっぱりでして…。

例えば英語を文法から覚えるかネイティブをひたすら聞いて覚えるかの差だと思いますが
前者だと判断頂いてのご回答ですよね、済みません後者です。折角教えて頂いたのに
Window_Base.prototype.drawIcon = function{
の構文の中にアイコン設定がされてない場合のifを入れて作るのか?
という事しか判断出来ませんでした。

メモ欄のご回答有難う御座います、今回の場合は取り敢えず$dataMapで良いのですね。
$は元々ゲーム内で用意して頂けている要素だと思いますが、
それらの活用方法が分からなかったので助かりました。

アクターの情報から摂取する=$dataActors[actor.actorId()]
クラスの情報から摂取する=actor.currentClass()

という情報しか現状入っていませんでしたので、上記に共通する法則が分からなくて。
多分クラスの情報摂取も$で出来る書き方があるのでしょうね。

「$dataMap.meta.(名前)」は表示したい絵が例えば「img~(№)」なら
手前にvar 関数名 = 場所.meta.img;と表記すれば良いという事でしょうか。
これが注意点の部分の1という判断ですかね?
Iconsetの画像を使うなら名前の部分をiconにすれば読み取ってくれるという事はわかりました。

注意点の2の処理は出来ると思いますが、1に関してはそもそも組み方が分かって居ないので
こんな判断しか出来ずに済みません。本当に御免なさい。
アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡する:

Re: メニュー画面構成について※複数の質問です

投稿記事 by トリアコンタン »

こちらこそ上手に説明できずにすみません。。

スクリプトから各種データベースの値を参照するためには専用の取得方法を習得する必要があります。
全てが網羅されているわけではありませんが、有志によって一覧化されていますので、よろしければお役立てください。

https://docs.google.com/spreadsheets/d/ ... edit#gid=0

この辺はあまり勉強っぽくなってしまっても本末転倒ですので、上をもとに作成例を作ってみました。

コード: 全て選択

// マップ名、多分ここにアイコンつけるコードが入るかな?
this.drawIcon(128, 0, 0);
this.drawIconでアイコンを表示させます。
ツクールではアイコン画像は「/img/system/IconSet.png」が固定で使用され、インデックスを指定して表示する仕様になっています。
・アイコンインデックス
ScreenShot04387.jpg
ScreenShot04387.jpg (6.43 KiB) 閲覧された回数 5225 回
さらに、メモ欄から値を取得し、かつ数値型に変換する処理を加えたものが以下になります。

コード: 全て選択

// マップ名、多分ここにアイコンつけるコードが入るかな?
this.drawIcon(parseInt($dataMap.meta.icon, 10), 0, 0);
this.drawText($gameMap.displayName(), Window_Base._iconWidth + 8, 0, 280, 'left');
楽しんでツクれることが第一かと思いますので、難しい部分はある程度、割り切ってコピペしまってもいいかもしれません。
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
アバター
sairi
記事: 105
登録日時: 2016年2月05日(金) 16:37
連絡する:

Re: メニュー画面構成について※複数の質問です

投稿記事 by sairi »

トリアコンタン様
こんな便利なリファレンスが出来ていたのですね、是非活用していきたいです :D
this.drawIcon(parseInt($dataMap.meta.icon, 10), X, Y);
10の意味は分からなかったけど数字を変えると全然違うアイコンになったので形式的なものと認識しました。
他のシーンでも活用出来そうなコードの書き方を丁寧な解説つきで有難う御座いました!
全てメモ取らせて頂きましたので今後も参考にしていきたいと思います。助かりました!
アバター
sairi
記事: 105
登録日時: 2016年2月05日(金) 16:37
連絡する:

Re: メニュー画面構成について※複数の質問です(解決済

投稿記事 by sairi »

2と3はちょっとどうしようもない動きみたいなので、
2はさておき、3に関しては別途お答え頂きまして、
Scene_ItemBase.prototype.showSubWindow = function(window) {
window.x = ここに好きな値を入れる;
window.show();
window.activate();
};
の記述を入れると良いと判明しました。皆様お付き合い有難う御座いました!
返信する

“MV:質問”に戻る