ページ 11

【解決】$game_actorsを全件取得したい

Posted: 2022年5月14日(土) 02:13
by much
actors = $game_actors
for actor in actors
p actor.name
end

上記のように、ループで全件取得しようとするとエラーが起きてしまいます
$game_actorsは配列ではないのでしょうか?

Re: $game_actorsを全件取得したい

Posted: 2022年5月14日(土) 11:56
by faida
こんにちは。

$game_actorsは配列ではなく、Game_Actorsというオブジェクトとなっております。
スクリプトエディタで定義されており、中身を見ると「intialize」と「[](actor_id)」だけが実装されています。

コード: 全て選択

#==============================================================================
# ■ Game_Actors
#------------------------------------------------------------------------------
#  アクターの配列のラッパーです。このクラスのインスタンスは $game_actors で参
# 照されます。
#==============================================================================

class Game_Actors
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    @data = []
  end
  #--------------------------------------------------------------------------
  # ● アクターの取得
  #--------------------------------------------------------------------------
  def [](actor_id)
    return nil unless $data_actors[actor_id]
    @data[actor_id] ||= Game_Actor.new(actor_id)
  end
end
$game_actors[n]でIDがnのアクターを参照するとき、
・すでにGame_Actorとして作成していればそれを
・作成していなければ新たにGame_Actorを
参照するということですね。

やりたいことが「全アクターの名前の参照」のようなデータベース上のものであれば、
muchさんの「actors = $game_actors」を「actors = $data_actors」とすればよいと思いますが、
そうでなく、例えば「パーティから外れているアクターも含め、全アクターの今の武器を見る」といった、
ゲームの進行に応じて変わるようなものであれば、
ちょっと工夫がいるかと思います。
(例:eachメソッドを改めて定義する、
   $game_variablesのどれかに今まで仲間にしたアクターのIDを保存する、等)

Re: $game_actorsを全件取得したい

Posted: 2022年5月14日(土) 18:20
by much
JavaScriptであれば、「console.log」。
PHPであれば「vardamp」と言ったように、
変数の値を参照し、ログに表示することができると思うのですが、RGSS3には、そういった機能は付いていないのでしょうか?

pだと、改行されなかったりして、非常に見づらいです。

Re: $game_actorsを全件取得したい

Posted: 2022年5月14日(土) 21:34
by faida
他言語に詳しくないので見当違いだったら申し訳ありませんが、
おそらく、Game_Actors、Game_Actor、RPG::Actorのどれかをp命令で出力しようとして、
そのインスタンス変数の羅列、あるいは配列変数の中身が改行されない
(「console.log」「vardamp」は改行される)ということなのでしょう。

結論から言うと、「該当するメソッドはない」と思われます。
p命令はinspectメソッドを用いて出力されますが、配列は改行なしで出力されるのが標準となっています。
また、改行はp命令ごとに行われるため、基本的にはp命令を複数行う形でしか、
改行を含む形で出力することはできないと思います。

Re: $game_actorsを全件取得したい

Posted: 2022年10月23日(日) 11:22
by much
そうなのですね…汗
ありがとうございます~!