【解決済み】マップ上に変数、所持金を並べて表示したい

アバター
アコルト
記事: 20
登録日時: 2017年2月04日(土) 02:56

【解決済み】マップ上に変数、所持金を並べて表示したい

投稿記事by アコルト » 2023年8月20日(日) 22:34

こんばんは。
現在、ソシャゲのようにガチャガチャで仲間を増やすタイプのRPGを制作中です。

viewtopic.php?f=43&t=6356&p=23153#p23091
数年前、こちらの質問でアイコンと変数を表示出来るようにはなったのですが、
合わせて所持金も表示したいと考えたため、改めてこちらに相談させて頂きました。
右上に所持金と変数を並べた状態で表示したいのですが、そういったことは可能でしょうか?
どうぞよろしくお願いします。
最後に編集したユーザー アコルト on 2023年8月22日(火) 22:37 [ 編集 1 回目 ]

昔にツクールを買ってそれきりになっているのと、
キャラのデフォルメ具合が好きで一生VXから離れられる気がしません。
現在カフェを舞台にした短編ADV、ガチャゲーRPGを鋭意制作中です(2023/08/10)
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: 【VX・RGSS2】マップ上に変数、所持金を並べて表示したい

投稿記事by TOMO » 2023年8月21日(月) 18:43

星潟様の常駐所持金ウィンドウはどうですか?

※ウィンドウの透明度を弄りたい場合は、102行目の下辺りに

コード: 全て選択

@map_gold_window.opacity = N
を入れ、戦闘画面の方は138行目の下辺りに

コード: 全て選択

@battle_gold_window.opacity = N
を入れれば可能です
(Nには0~255の数値を入れる)
アバター
アコルト
記事: 20
登録日時: 2017年2月04日(土) 02:56

Re: 【VX・RGSS2】マップ上に変数、所持金を並べて表示したい

投稿記事by アコルト » 2023年8月22日(火) 15:08

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

画像
昔にツクールを買ってそれきりになっているのと、
キャラのデフォルメ具合が好きで一生VXから離れられる気がしません。
現在カフェを舞台にした短編ADV、ガチャゲーRPGを鋭意制作中です(2023/08/10)
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: 【VX・RGSS2】マップ上に変数、所持金を並べて表示したい

投稿記事by TOMO » 2023年8月22日(火) 17:11

変数の値が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
を入れましょう(戦闘画面の方にも同じ感じで)
アバター
アコルト
記事: 20
登録日時: 2017年2月04日(土) 02:56

Re: 【VX・RGSS2】マップ上に変数、所持金を並べて表示したい

投稿記事by アコルト » 2023年8月22日(火) 18:46

TOMO様
無事変数の方も表示出来ました!
ありがとうございます。



画像
所持金ウィンドウの方ですが、はじめこそ文字サイズも右の変数と同じサイズにはなりますが、
メニューを開いたり、セーブデータから読み込んだりすると元の大きいフォントサイズになってしまいます。
(また、スクリプト内の数値も弄ってみましたが思ったようにy軸が変えられずにいます)

Window_Goldの方で直接設定を変えることも考えましたが、
ショップなどで所持金を表示することもあるのでそちらはあまりいじりたくはないため……
何かいい方法があれば是非教えてほしいです。
引き続きよろしくお願いします。
昔にツクールを買ってそれきりになっているのと、
キャラのデフォルメ具合が好きで一生VXから離れられる気がしません。
現在カフェを舞台にした短編ADV、ガチャゲーRPGを鋭意制作中です(2023/08/10)
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: 【VX・RGSS2】マップ上に変数、所持金を並べて表示したい

投稿記事by TOMO » 2023年8月22日(火) 22:19

でしたら代わりに48行目の下辺りに

コード: 全て選択

self.contents.font = MAZ::SPR_FONT
self.contents.font.size = MAZ::SPR_SIZE
を入れてください
(Window_SubGoldの方ならWindow_Goldは変わりません)

Y座標の方は設定の方でマイナスの数値を入れれば可能なはずです
アバター
アコルト
記事: 20
登録日時: 2017年2月04日(土) 02:56

Re: 【VX・RGSS2】マップ上に変数、所持金を並べて表示したい

投稿記事by アコルト » 2023年8月22日(火) 22:36

今度は問題なく表示出来ました!
TOMO様ご丁寧にありがとうございました、これにて解決済みとさせて頂きます。
昔にツクールを買ってそれきりになっているのと、
キャラのデフォルメ具合が好きで一生VXから離れられる気がしません。
現在カフェを舞台にした短編ADV、ガチャゲーRPGを鋭意制作中です(2023/08/10)

“VX / Ace:質問” へ戻る