質問/グローバル変数に配列をいれて読み込む方法(質問掲示板

投稿:       mini shirosaboten 投稿:2010/08/10 17:10:10(最新:2010/08/18 00:26:18)
グローバル変数を使うとゲーム同士でデータが引き継げるということで、やってみたんですがうまくいきません。

↓引継ぎもとのゲーム
addSaveGlobalVariable("ゲーム1装備配列", getEquipmentIdArray())


↓引き継ぎ先開始スクリプト
clearLoadGlobalVariable()
addLoadGlobalVariable(ゲームID , "ゲーム1装備配列")
loadGlobalVariable()


↓マップ上イベント
a = createArray()
a = getLoadedGlobalVariable(ゲームID, "ゲーム1装備配列")
i = 0
while i < 16

  if a[i
> 0
giveEquipment(a[i])
end
i = i + 1
end
]

こうすると5分の3くらいの確立で装備を引き継ぎを失敗します。
グローバル変数に配列を入れること(もしくはやり方)が間違っているのか
グローバル変数の読み込みに失敗しているのか、
1st argument is not array . line: 6 ←ここはたまに2だったりします
と出ます。

wikiとか探したんですが、それらしい答えが見つからなかったので質問してみました。よろしくお願いします。

コメントする

コメントするには、ログインする必要があります。

コメント一覧

      mini shirosaboten(投稿日:2010/08/18 00:26, 履歴)
原因がわかってよかったです。
読み込みができるようになりました。

お手数をかけて申し訳ないのですが、もし可能でしたら具体的な装備配列名が出ているコメントを削除してもらえませんか?
(8.17/17:51のところです)

原因を探るためには仕方なかったのですが、どのIDのゲームを引き継ぐかとか、どんな配列を呼ぶのかとかはほかの人にはあまり知られたくない内容です。


今回は長々と付き合ってくださりありがとうございました
今後はより的確に現状報告をできるよう努めます…。
Zararu128x128 mini dycoon(投稿日:2010/08/17 20:22, 履歴)
調べてみたところ、
主人公キャラクターを設定しているゲームで
グローバル変数の保存がされないという問題を見つけました。
ご迷惑をおかけして大変申し訳ありません。
現在修正作業をおこない、主人公キャラクターが設定されている
ゲームでもグローバル変数の保存ができるようになっていルカと思います。

よろしくお願いします。
      mini shirosaboten(投稿日:2010/08/17 17:13, 履歴)
addSaveGlobalVariable("変数名", getVariable("配列"))

でクリア直前に
speak(getVariable("配列"))
ではちゃんと配列が表示されています。
その直後にクリアにしても

読み込み側で
speak(getLoadedGlobalVariable(5722, "変数名"))
ではnullが返ってきました

保存側も読み込み側も何度も確認、修正をしたのですが、原因が見つかりません。お手上げです^^;
Zararu128x128 mini dycoon(投稿日:2010/08/16 20:25, 履歴)
2つのゲームの2つの変数を読み込むということをおこなっていますが、
問題なく動作しているようです。

一応確認ですが、ID:5722のゲームには
データの書き込みの処理を記述した後に
ゲームクリアしてありますでしょうか?

先に示した判定方法では、まだデータが保存されていない場合も
読み込みに失敗したと表示されるかと思います。

よろしくお願いします。
      mini shirosaboten(投稿日:2010/08/15 23:13, 履歴)
こちらこそお手数かけて申し訳ないです^^;
早速確認してみました。
ID:914の変数は読み込みに成功するようになりました。(失敗なし)
ところが
ID:5722の変数は毎回失敗するようです。(成功しなくなりました)

お手数かけます、よろしくお願いします。
Zararu128x128 mini dycoon(投稿日:2010/08/15 16:51, 履歴)
お手数をおかけして申し訳ありません。

問題を再現することができ、
Rmakeのグローバル変数の読み込みの部分の問題で
あることがわかりました。
修正をすでにおこなってサーバーに反映してありますので
ご確認いただければとおもいます。

よろしくお願いします。
      mini shirosaboten(投稿日:2010/08/14 18:46, 履歴)
書き込みのゲームは
ID:914(サボネシア)とID:5722(魔法使いアポロ)です。

読み込みはID:4679のゲームです。


コードを書き換えるわけではなく、プレイしなおすだけで読み込み成功と失敗の変数がランダムで出ます。
(4679のサボテンに話しかけると判定をします。)
Zararu128x128 mini dycoon(投稿日:2010/08/14 16:39, 履歴)
2つのゲームから2つずつグローバル変数を読み込む
スクリプトを書いてみましたが、問題は再現しませんでした。
問題が発生しているゲームのidをお伝えいただくことは可能でしょうか?
(データの書き込みと読み込みを行っている
両方のゲームのがあるとよいです)

>1st Argument is not arrayと出ます。

これは、データが配列でないもの(読み込めなくてnullなどになっている場合)に対して配列の操作を行うとそうなるかと思います。

再現コードを書いている間、数字が全角か半角かで
似たような問題が起こることはありました。
(ただし、ランダム性はありませんでした)

よろしくお願いします。
      mini shirosaboten(投稿日:2010/08/14 12:07, 履歴)
まず、開始スクリプトの
if loadGlobalVariable()
  speak("グローバル変数読み込み成功")
else
  speak("グローバル変数読み込み失敗")
end

では、毎回『読み込み成功』と出ます。

読み込むグローバル変数は4つで(二つのゲームから2つずつ、いずれも配列)、それぞれに判定をしました。
if getLoadedGlobalVariable(1234, "ゲームA変数1")
 speak("ゲームA変数1の読み込み成功しました")
else
 speak("ゲームA変数1の読み込みに失敗しました")
end
if getLoadedGlobalVariable(1234, "ゲームA変数2")
 speak("ゲームA変数2の読み込み成功しました")
else
 speak("ゲームA変数2の読み込みに失敗しました")
end
if getLoadedGlobalVariable(5678, "ゲームB変数1")
 speak("ゲームB変数1の読み込み成功しました")
else
 speak("ゲームB変数1の読み込みに失敗しました")
end
if getLoadedGlobalVariable(5678, "ゲームB変数2")
 speak("ゲームB変数2の読み込み成功しました")
else
 speak("ゲームB変数2の読み込みに失敗しました")
end

すると
2つ~3つの変数の読み込みに失敗と出ます。
失敗する変数は毎回ランダムで失敗したものについては
1st Argument is not arrayと出ます。
なぜでしょう…><;

      mini shirosaboten(投稿日:2010/08/14 11:17, 履歴)
わかりました。ありがとうございます。
Zararu128x128 mini dycoon(投稿日:2010/08/11 22:27, 履歴)
Rmakeのご利用ありがとうございます。

同じようなコードを書いてみて実験した限りでは
問題は発生しないようでした。

とりあえず、マップ上のイベントで
if a
  #読み込み成功
else
  #読み込み失敗
end

という判定はできるかと思います。
何が起こっているかよりはっきりさせるために、
aをspeakで表示させてもよいかもしれません。

よろしくお願いします。
      mini shirosaboten(投稿日:2010/08/10 17:12, 履歴)
失敗。
↓マップ上のイベント
a = createArray()
a = getLoadedGlobalVariable(ゲームID, "ゲーム1装備配列")
i = 0
while i < 16

  if a[i] > 0 
giveEquipment(a[i]) 
end 
i = i + 1 
end