ページ 1 / 1
【解決済み】マップ上に変数、所持金を並べて表示したい
Posted: 2023年8月20日(日) 22:34
by やっこ
こんばんは。
現在、ソシャゲのようにガチャガチャで仲間を増やすタイプのRPGを制作中です。
viewtopic.php?f=43&t=6356&p=23153#p23091
数年前、こちらの質問でアイコンと変数を表示出来るようにはなったのですが、
合わせて所持金も表示したいと考えたため、改めてこちらに相談させて頂きました。
右上に所持金と変数を並べた状態で表示したいのですが、そういったことは可能でしょうか?
どうぞよろしくお願いします。
Re: 【VX・RGSS2】マップ上に変数、所持金を並べて表示したい
Posted: 2023年8月21日(月) 18:43
by TOMO
星潟様の常駐所持金ウィンドウはどうですか?
※ウィンドウの透明度を弄りたい場合は、102行目の下辺りに
コード: 全て選択
@map_gold_window.opacity = N
を入れ、戦闘画面の方は138行目の下辺りに
コード: 全て選択
@battle_gold_window.opacity = N
を入れれば可能です
(Nには0~255の数値を入れる)
Re: 【VX・RGSS2】マップ上に変数、所持金を並べて表示したい
Posted: 2023年8月22日(火) 15:08
by やっこ
TOMO様
さっそく導入してみました。
ウィンドウの透明度表記まで、ご丁寧にありがとうございます。

表示は出来たのですが、右の変数の数値のフォントサイズと大きさを合わせたいのと、
イベントにて所持金と変数に数字を加算してみたのですが、変数の方が0のままになってしまい、困っています。
コードを添付しますので、おかしい点があれば教えてくださると幸いです。
引き続きよろしくお願いします。
上から二段階直進様の変数右上表示、星潟様の常駐所持金ウィンドウをお借りしています。
コード: 全て選択
=begin
●任意の変数をタイマー的に表示する ver1.0----------------------(c)光の軌想曲
指定した変数の名前と値を、タイマーと同じ要領で画面右上に
表示させ続けることができます。
○つかいかた
ゲーム変数[SPR_VER_ID]の値を、表示させたい変数のIDにしておきます。
スイッチ[SPR_SWITCH_ID]がオンの間、その変数の名前と値が表示されます。
○競合の可能性:ほとんどないと思われます
Spriteset_Map,Spriteset_Battleをエイリアス。
○更新履歴
2010/ 4/18 ver1.0公開
=end
#----------------------------------------------------------------------------
# ↓カスタマイズポイント
module MAZ
# ・表示オン/オフを切り替えるスイッチID
SPR_SWITCH_ID = 1
# ・表示する変数のIDを指定する変数ID
SPR_VAR_ID = 1
# ・表示する変数の桁数を変更する変数ID
SPR_VAR_KETA = 3
# ・使用するフォント名
# 使いたいフォントから順に並べてください。
# (参考)Arialはタイマーと同じフォントですが、日本語が文字化けするので注意
SPR_FONT = ["UmePlus Gothic"]
# ・文字のサイズ
SPR_SIZE = 18
# ・文字の色 R,G,Bの順に設定
S_R = 255
S_G = 255
S_B = 255
# ・文字の不透明度
S_A = 255
end
# ↑カスタマイズポイントおわり
#------------------------------------------------------------------------------
#==============================================================================
# ■ Sprite_Variable
#------------------------------------------------------------------------------
# 変数表示用のスプライトです。$game_system を監視し、スプライトの状態を
# 自動的に変化させます。
#==============================================================================
class Sprite_Variable < Sprite
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# viewport : ビューポート
#--------------------------------------------------------------------------
def initialize(viewport)
super(viewport)
self.bitmap = Bitmap.new(320, 48)
self.bitmap.font.name = MAZ::SPR_FONT
self.bitmap.font.size = MAZ::SPR_SIZE
self.x = 529 - self.bitmap.width - 4
self.y = 0
self.z = 200
update
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
self.bitmap.dispose
super
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
if $game_system.timer_working # タイマーと重ならないよう避ける
self.y = 36
else
self.y = 0
end
self.visible = $game_switches[MAZ::SPR_SWITCH_ID]
if $game_variables[$game_variables[MAZ::SPR_VAR_ID]] != @value
self.bitmap.clear
id = $game_variables[MAZ::SPR_VAR_ID]
@name = $data_system.variables[id]
@value = $game_variables[id]
@name = "" if @name == nil
text = sprintf("%s %d", @name, @value)
self.bitmap.font.color.set(MAZ::S_R, MAZ::S_G, MAZ::S_B, MAZ::S_A)
self.bitmap.draw_text(self.bitmap.rect, text, 2)
end
end
end
#==============================================================================
# ■ Spriteset_Map
#------------------------------------------------------------------------------
# マップ画面のスプライトやタイルマップなどをまとめたクラスです。このクラスは
# Scene_Map クラスの内部で使用されます。
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias val_initialize initialize
def initialize
val_initialize
create_variable
update
end
#--------------------------------------------------------------------------
# ● 変数表示スプライトの作成
#--------------------------------------------------------------------------
def create_variable
@variable_sprite = Sprite_Variable.new(@viewport2)
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
alias var_dispose dispose
def dispose
dispose_variable
var_dispose
end
#--------------------------------------------------------------------------
# ● 変数スプライトの解放
#--------------------------------------------------------------------------
def dispose_variable
@variable_sprite.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias var_update update
def update
update_variable
var_update
end
#--------------------------------------------------------------------------
# ● 変数スプライトの更新
#--------------------------------------------------------------------------
def update_variable
@variable_sprite.update if @variable_sprite != nil
end
end
#==============================================================================
# ■ Spriteset_Battle
#------------------------------------------------------------------------------
# バトル画面のスプライトをまとめたクラスです。このクラスは Scene_Battle クラ
# スの内部で使用されます。
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias var_initialize initialize
def initialize
var_initialize
create_variable
update
end
#--------------------------------------------------------------------------
# ● 変数スプライトの作成
#--------------------------------------------------------------------------
def create_variable
@variable_sprite = Sprite_Variable.new(@viewport2)
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
alias var_dispose dispose
def dispose
dispose_variable
var_dispose
end
#--------------------------------------------------------------------------
# ● 変数スプライトの解放
#--------------------------------------------------------------------------
def dispose_variable
@variable_sprite.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias var_update update
def update
update_variable
var_update
end
#--------------------------------------------------------------------------
# ● 変数スプライトの更新
#--------------------------------------------------------------------------
def update_variable
@variable_sprite.update if @variable_sprite != nil
end
end
コード: 全て選択
#==============================================================================
# ■ RGSS2 常駐所持金ウィンドウ Ver1.00 by 星潟
#==============================================================================
# マップ/戦闘時に表示しっぱなしの所持金ウィンドウを作成出来ます。
#
# 通常の所持金ウィンドウと異なり
# 指定スイッチがONの場合は、メッセージウィンドウが閉じていても表示され続けます。
# このウィンドウに表示されている所持金は、所持金の変動で自動更新されます。
#
# なお、通常の所持金ウィンドウとは別物として扱われる為
# メッセージウィンドウで\Gを使用すると、重複して表示されますので
# こちらは使用されない方がよろしいかと思われます。
#==============================================================================
module SubGoldWindow
#基礎知識
#ゴールドウィンドウは幅160、高さ48のウィンドウです。
#544×416の通常サイズで右上に表示するのであれば[384,0]、
#640×480の通常サイズで右上に表示するのであれば[480,0]が適正値です。
#マップ画面での座標設定。
#順にX座標とY座標を設定して下さい。
M_GW_XY = [250,0]
#マップ画面での表示フラグとなるスイッチIDの設定。
#このIDのスイッチがONの時、マップ画面にゴールドウィンドウが表示されます。
MSwitch = 1
#戦闘画面での座標設定。
#順にX座標とY座標を設定して下さい。
B_GW_XY = [384,0]
#戦闘画面での表示フラグとなるスイッチIDの設定。
#このIDのスイッチがONの時、戦闘画面にゴールドウィンドウが表示されます。
BSwitch = 100
end
class Window_SubGold < Window_Gold
#--------------------------------------------------------------------------
# リフレッシュ
#--------------------------------------------------------------------------
def refresh
@last_gold = $game_party.gold
super
end
end
class Window_MapSubGold < Window_SubGold
#--------------------------------------------------------------------------
# 更新
#--------------------------------------------------------------------------
def update
super
refresh if @last_gold != $game_party.gold
$game_switches[SubGoldWindow::MSwitch] ? open : close
end
end
class Window_BattleSubGold < Window_SubGold
#--------------------------------------------------------------------------
# 更新
#--------------------------------------------------------------------------
def update
super
refresh if @last_gold != $game_party.gold
$game_switches[SubGoldWindow::BSwitch] ? open : close
end
end
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# 開始処理
#--------------------------------------------------------------------------
alias start_sub_gold start
def start
start_sub_gold
create_sub_gold_window
end
#--------------------------------------------------------------------------
# 終了処理
#--------------------------------------------------------------------------
alias terminate_sub_gold terminate
def terminate
@map_gold_window.dispose
terminate_sub_gold
end
#--------------------------------------------------------------------------
# フレーム更新
#--------------------------------------------------------------------------
alias update_sub_gold update
def update
@map_gold_window.update
update_sub_gold
end
#--------------------------------------------------------------------------
# ゴールドウィンドウの作成
#--------------------------------------------------------------------------
def create_sub_gold_window
a = SubGoldWindow::M_GW_XY
@map_gold_window = Window_MapSubGold.new(a[0],a[1])
@map_gold_window.x = a[0]
@map_gold_window.y = a[1]
@map_gold_window.opacity = 0
@map_gold_window.openness = 0
end
end
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# 開始処理
#--------------------------------------------------------------------------
alias start_sub_gold start
def start
start_sub_gold
create_sub_gold_window
end
#--------------------------------------------------------------------------
# 終了処理
#--------------------------------------------------------------------------
alias terminate_sub_gold terminate
def terminate
@battle_gold_window.dispose
terminate_sub_gold
end
#--------------------------------------------------------------------------
# 基本更新処理
#--------------------------------------------------------------------------
alias update_basic_sub_gold update_basic
def update_basic(main = false)
update_basic_sub_gold(main)
@battle_gold_window.update
end
#--------------------------------------------------------------------------
# ゴールドウィンドウの作成
#--------------------------------------------------------------------------
def create_sub_gold_window
a = SubGoldWindow::B_GW_XY
@battle_gold_window = Window_BattleSubGold.new(a[0],a[1])
@battle_gold_window.x = a[0]
@battle_gold_window.y = a[1]
@battle_gold_window.opacity = 0
@battle_gold_window.openness = 0
end
end

Re: 【VX・RGSS2】マップ上に変数、所持金を並べて表示したい
Posted: 2023年8月22日(火) 17:11
by TOMO
変数の値が0のままなのは91行目と93行目が原因です
コード: 全て選択
$game_variables[$game_variables[MAZ::SPR_VAR_ID]]
は
コード: 全て選択
$game_variables[MAZ::SPR_VAR_ID]
で、
コード: 全て選択
id = $game_variables[MAZ::SPR_VAR_ID]
は
コード: 全て選択
id = MAZ::SPR_VAR_ID
です
フォントの変更は、透明度を変更した場所の下辺りに
コード: 全て選択
@map_gold_window.contents.font = MAZ::SPR_FONT
@map_gold_window.contents.font.size = MAZ::SPR_SIZE
を入れましょう(戦闘画面の方にも同じ感じで)
Re: 【VX・RGSS2】マップ上に変数、所持金を並べて表示したい
Posted: 2023年8月22日(火) 18:46
by やっこ
TOMO様
無事変数の方も表示出来ました!
ありがとうございます。

所持金ウィンドウの方ですが、はじめこそ文字サイズも右の変数と同じサイズにはなりますが、
メニューを開いたり、セーブデータから読み込んだりすると元の大きいフォントサイズになってしまいます。
(また、スクリプト内の数値も弄ってみましたが思ったようにy軸が変えられずにいます)
Window_Goldの方で直接設定を変えることも考えましたが、
ショップなどで所持金を表示することもあるのでそちらはあまりいじりたくはないため……
何かいい方法があれば是非教えてほしいです。
引き続きよろしくお願いします。
Re: 【VX・RGSS2】マップ上に変数、所持金を並べて表示したい
Posted: 2023年8月22日(火) 22:19
by TOMO
でしたら代わりに48行目の下辺りに
コード: 全て選択
self.contents.font = MAZ::SPR_FONT
self.contents.font.size = MAZ::SPR_SIZE
を入れてください
(Window_SubGoldの方ならWindow_Goldは変わりません)
Y座標の方は設定の方でマイナスの数値を入れれば可能なはずです
Re: 【VX・RGSS2】マップ上に変数、所持金を並べて表示したい
Posted: 2023年8月22日(火) 22:36
by やっこ
今度は問題なく表示出来ました!
TOMO様ご丁寧にありがとうございました、これにて解決済みとさせて頂きます。