ページ 11

【解決済み】配列の簡単な作成方法

Posted: 2016年8月27日(土) 21:33
by ONOZUKA
例えば、$game_map.events[n].xをArray_Aに代入するとすればどうしたら短く済むでしょうか?
ループ構文なども試しましたがうまくいきませんでした。

例:Array_A = [$game_map.events[1].x,$game_map.events[2].x,$game_map.events[3].x.....]

Re: 配列の簡単な作成方法

Posted: 2016年8月28日(日) 09:40
by faida
割と基本的なことなんですけれども、RGSSでは変数名の頭が大文字だと「定数」という扱いになります。
なので、Array_Aというのは定義されると変更できなくなるんですね。

普通であれば、「ローカル変数」か「グローバル変数」に代入等するのがいいと思います(array_Aや$Array_A等)。
これらであればループ構文でも配列の作成がうまくいくのではないでしょうか。

Re: 配列の簡単な作成方法

Posted: 2016年8月28日(日) 20:25
by ONOZUKA
教えていただきありがとうございます。配列にこのような仕様があったんですね。
加えて質問させていただきたいのですが、以下のようなスクリプトを作ってみました。

コード: 全て選択

#===============================================================================
# RGSS3 リージョンチェック Ver1.0a (2016/08/28) by ONOZUKA
#===============================================================================
# 特定の範囲のリージョンIDの個数を出力することができます。
# 改変は自由です。クレジットには制作者名のみ載せてください。
#===============================================================================
# イベントスクリプトにregion_checkといれることで起動します。
# 結果は$game_variables[n] = $count_regionなりで取得してください。
#===============================================================================
Game_Interpreter
def region_check
 $search_range = Array.new
 $search_interval = Array.new
#特定のリージョンを数える
 $search_region = 1
#コンソール画面に出力結果を表示する
 $search_console = true
#[0,100,0,200] :X座標は0から100まで,Y座標は0から200までの範囲をチェックする。
 $search_range    = [0,100,0,200] 
# 1,1にすると、範囲中の全タイルを調べる。2,2にすると網目状にチェックする。
 $search_interval = [1,1]
#===============================================================================
# エラー回避策
 xstart = $seach_range[0]
 xlimit = $seach_range[1]
 ystart = $seach_range[2]
 ylimit = $seach_range[3]
 xsplit = $search_interval[0]
 ysplit = $search_interval[1]
#===============================================================================
# リージョン走査
 xline = xstart                  #Xの開始値を代入
 yline = ystart                  #Yの開始値を代入
 xypos = Array.new               #空配列の生成
  loop do                        #ループの開始
    xypos << $game_map.region_id(xline,yline) #リージョンIDの取得
    yline += ysplit              #Y方向走査
  if xline > xlimit              #X方向走査の初期化判定
    break                        #捜査終了
  elsif yline > ylimit           #Y方向走査の初期化判定
    xline += xsplit              #X方向走査
    yline = 0                    #Y方向走査を初期化
  end
end
if $search_console = true then   #コンソールへの表示判定
  p xypos.count($search_region)  #コンソールへの表示
end
  $count_region = xypos.count($search_region) #グローバル変数への代入
end
#===============================================================================
配列を使わず実数値を直接代入すれば表示されないエラーメッセージが以下です。
Game_Interpreter(1409) NoMethodError
undefined method '[]'for nil:NilClass
原因が分からず困ってます。教えてくだされば幸いです。

Re: 配列の簡単な作成方法

Posted: 2016年8月28日(日) 22:54
by faida
# エラー回避策 の変数名をよくチェックしてみてください。

ちなみにエラーの内容は「nilオブジェクトに"[]"というメソッドがないよ」ってことです。
まぁ定義されてない変数だから仕方ないですね。

Re: 配列の簡単な作成方法

Posted: 2016年8月28日(日) 23:31
by ONOZUKA
faida様。
ご助言ありがとうございます。誤植だったようで今後とも同じエラーメッセージを見かけたら心がけようと思います。