コメント

このコメントは、【トピック】変数についてへのコメントです。

コメントの内容

   mini ___(投稿日:2011/04/03 22:04/03/11)
Rmake記法を利用すると、インデントが行えて便利ですよーっと。
   Rmake記法
if getFlag("植物") 
  if syokubutu==0 
    speak("観葉植物が置いてある") 
  end 
  if syokubutu==1 
    speak("観葉植物が置いてある") 
  end 
  if syokubutu==2 
    speak("液体肥料が刺さっている") 
  end 
  if syokubutu==3 
    speak("よく見たら接着剤だった") 
    speak("接着剤を手に入れた!") 
    setVariable("接着剤", 1) 
  end 
  if syokubutu>=4 
    speak("観葉植物が置いてある") 
  end 
else 
  setFlag("植物", true) 
  setVariable("syokubutu", 0) 
end 


私が上記コードを新規データに貼りつけてみた所、
一回目は特にエラー無く動作しましたが、2回目以降…
すなわち、if getFlag("植物") 以下でエラーがでました。

エラーメッセージは"not defined variable : syokubutu"ですので、
つまり「変数syokubutuってなんぞ?」と言うことです。

変数には3種類あり、それぞれ
・ローカル変数
  cnt = 0
  syokubutu = 0
  # 気軽に使用できる。
  # シーン、チャプター、イベント後などで消滅。
・基本変数
  setVariable("変数名" , 0)
  # 取得、設定共に少々長くなる。
  # セーブ時に保存、ロード時に読み込みされる。
  # ゲーム内ならどこからでも参照可。
・グローバル変数
  addSaveGlobalVariable("Gold", 1)
  # 一人のゲーム作成者に付き8つまで値を保存可能。
  # 複数ゲームをまたいで値を持ち越せる。
  # Aでお金を稼ぐとBでも、Bで経験値を稼ぐとAでも、みたいな。

という感じになってるみたいです。

今回のエラーは、基本変数とローカル変数が
混合してしまったものではないかと考えられます。
setVariable("syokubutu", 0)
  # このように基本変数で宣言しているのですから、
if syokubutu==0 
  # この部分を
if GetVariable("syokubutu")==0
  # とすれば、エラーは無くなると思いますよ。 



後は蛇足となりますが、今回のように
「変数syokubutuの値によって処理を変更する」場合、
if~endを繰り返すのではなく、case文を使うと楽になる場合があります。
例文として、こんなコードが挙げられています。
a = 2
case a
  when 1     # a == 1なら
    speak("case -> 1")
  when 2     # a == 2なら
    speak("case -> 2")
  when 3     # a == 3なら
    speak("case -> 3")
end

どの場合でも、speakの後 endまで飛んできます。
a >= 4 とかが再現できないっぽいので、
今回のコードの場合は使用すべきかどうか悩みますが…。


エラーが出るなら、エラー番号(例:#1009)ですとか、
エラーメッセージとかが画面下部に出ていると思います。
それをお教え頂けると、よりスムーズに回答できるかと。

問題が解決できなかったら、お手数ですが
より詳しい情報と共に再度質問してください。
長々と失礼しました。

コメントの内容(一番最初の投稿)

   mini ___(投稿日:2011/04/03 22:04/03/11)
Rmake記法を利用すると、インデントが行えて便利ですよーっと。
   Rmake記法
if getFlag("植物") 
  if syokubutu==0 
    speak("観葉植物が置いてある") 
  end 
  if syokubutu==1 
    speak("観葉植物が置いてある") 
  end 
  if syokubutu==2 
    speak("液体肥料が刺さっている") 
  end 
  if syokubutu==3 
    speak("よく見たら接着剤だった") 
    speak("接着剤を手に入れた!") 
    setVariable("接着剤", 1) 
  end 
  if syokubutu>=4 
    speak("観葉植物が置いてある") 
  end 
else 
  setFlag("植物", true) 
  setVariable("syokubutu", 0) 
end 


私が上記コードを新規データに貼りつけてみた所、
一回目は特にエラー無く動作しましたが、2回目以降…
すなわち、if getFlag("植物") 以下でエラーがでました。

エラーメッセージは"not defined variable : syokubutu"ですので、
つまり「変数syokubutuってなんぞ?」と言うことです。

変数には3種類あり、それぞれ
・ローカル変数
  cnt = 0
  syokubutu = 0
  # 気軽に使用できる。
  # シーン、チャプター、イベント後などで消滅。
・基本変数
  setVariable("変数名" , 0)
  # 取得、設定共に少々長くなる。
  # セーブ時に保存、ロード時に読み込みされる。
  # ゲーム内ならどこからでも参照可。
・グローバル変数
  addSaveGlobalVariable("Gold", 1)
  # 一人のゲーム作成者に付き8つまで値を保存可能。
  # 複数ゲームをまたいで値を持ち越せる。
  # Aでお金を稼ぐとBでも、Bで経験値を稼ぐとAでも、みたいな。

という感じになってるみたいです。

今回のエラーは、基本変数とローカル変数が
混合してしまったものではないかと考えられます。
setVariable("syokubutu", 0)
  # このように基本変数で宣言しているのですから、
if syokubutu==0 
  # この部分を
if GetVariable("syokubutu")==0
  # とすれば、エラーは無くなると思いますよ。 



後は蛇足となりますが、今回のように
「変数syokubutuの値によって処理を変更する」場合、
if~endを繰り返すのではなく、case文を使うと楽になる場合があります。
例文として、こんなコードが挙げられています。
a = 2
case a
  when 1     # a == 1なら
    speak("case -> 1")
  when 2     # a == 2なら
    speak("case -> 2")
  when 3     # a == 3なら
    speak("case -> 3")
end

どの場合でも、speakの後 endまで飛んできます。
a >= 4 とかが再現できないっぽいので、
今回のコードの場合は使用すべきかどうか悩みますが…。


エラーが出るなら、エラー番号(例:#1009)ですとか、
エラーメッセージとかが画面下部に出ていると思います。
それをお教え頂けると、よりスムーズに回答できるかと。

問題が解決できなかったら、お手数ですが
より詳しい情報と共に再度質問してください。
長々と失礼しました。