$game_actorsを全件取得したい

much
記事: 43
登録日時: 2017年11月09日(木) 01:01

$game_actorsを全件取得したい

投稿記事by much » 2022年5月14日(土) 02:13

actors = $game_actors
for actor in actors
p actor.name
end

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

faida
記事: 267
登録日時: 2015年12月17日(木) 16:44

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

投稿記事by faida » 2022年5月14日(土) 11:56

こんにちは。

$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を保存する、等)
---------------------------------------------
自作の(改造でない)スクリプト素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
much
記事: 43
登録日時: 2017年11月09日(木) 01:01

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

投稿記事by much » 2022年5月14日(土) 18:20

JavaScriptであれば、「console.log」。
PHPであれば「vardamp」と言ったように、
変数の値を参照し、ログに表示することができると思うのですが、RGSS3には、そういった機能は付いていないのでしょうか?

pだと、改行されなかったりして、非常に見づらいです。
faida
記事: 267
登録日時: 2015年12月17日(木) 16:44

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

投稿記事by faida » 2022年5月14日(土) 21:34

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

結論から言うと、「該当するメソッドはない」と思われます。
p命令はinspectメソッドを用いて出力されますが、配列は改行なしで出力されるのが標準となっています。
また、改行はp命令ごとに行われるため、基本的にはp命令を複数行う形でしか、
改行を含む形で出力することはできないと思います。
---------------------------------------------
自作の(改造でない)スクリプト素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。

“VX / Ace:質問” へ戻る