変数について(質問掲示板)
投稿: ugonight
投稿:2011/04/03 17:37:03(最新:2011/04/04 12:04:04)
イベントを調べるたびメッセージが変わるようにしたいのですが。
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
とするとエラーになってしまいますどうしたらよいですか?
ツイート
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
とするとエラーになってしまいますどうしたらよいですか?
コメントする
コメントするには、ログインする必要があります。
コメント一覧
…すいません、私のミスです。
"undefined identifier"も同じような意味です。
「GetVariableとか知らないよ」といったところでしょうか。
正確には"GetVariable"ではなく"getVariable"ですかね。
最初が小文字です。
関数は名前で用途がだいたい分かるので、
覚えてしまったほうが楽になりますよ。
しかし、今回のように記述ミスする可能性も高くなります。><
関数リファレンスや、関数入力補助を活用し、
ミスタイプの無いようにしましょう。私を反面教師にw
自作関数はこんな感じで大文字スタートにしてしまうので、
ついつい混合してしまいました。ごめんなさい。
"undefined identifier"も同じような意味です。
「GetVariableとか知らないよ」といったところでしょうか。
正確には"GetVariable"ではなく"getVariable"ですかね。
最初が小文字です。
関数は名前で用途がだいたい分かるので、
覚えてしまったほうが楽になりますよ。
しかし、今回のように記述ミスする可能性も高くなります。><
関数リファレンスや、関数入力補助を活用し、
ミスタイプの無いようにしましょう。私を反面教師にw
自作関数はこんな感じで大文字スタートにしてしまうので、
ついつい混合してしまいました。ごめんなさい。
Rmake記法を利用すると、インデントが行えて便利ですよーっと。
Rmake記法
私が上記コードを新規データに貼りつけてみた所、
一回目は特にエラー無く動作しましたが、2回目以降…
すなわち、if getFlag("植物") 以下でエラーがでました。
エラーメッセージは"not defined variable : syokubutu"ですので、
つまり「変数syokubutuってなんぞ?」と言うことです。
変数には3種類あり、それぞれ
という感じになってるみたいです。
今回のエラーは、基本変数とローカル変数が
混合してしまったものではないかと考えられます。
後は蛇足となりますが、今回のように
「変数syokubutuの値によって処理を変更する」場合、
if~endを繰り返すのではなく、case文を使うと楽になる場合があります。
例文として、こんなコードが挙げられています。
どの場合でも、speakの後 endまで飛んできます。
a >= 4 とかが再現できないっぽいので、
今回のコードの場合は使用すべきかどうか悩みますが…。
エラーが出るなら、エラー番号(例:#1009)ですとか、
エラーメッセージとかが画面下部に出ていると思います。
それをお教え頂けると、よりスムーズに回答できるかと。
問題が解決できなかったら、お手数ですが
より詳しい情報と共に再度質問してください。
長々と失礼しました。
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)ですとか、
エラーメッセージとかが画面下部に出ていると思います。
それをお教え頂けると、よりスムーズに回答できるかと。
問題が解決できなかったら、お手数ですが
より詳しい情報と共に再度質問してください。
長々と失礼しました。
if文を elsif で全部つなげちゃった方が判り易くないスか?
気になるのは
フラグ「植物」が別のイベントで進行具合の確認に使われるからこそのフラグなのに、このイベント内でsyokubutuに0を入れて終了している点かな。
つまり初回は調べても、変数やフラグがセットされるだけでイベントが終了する、という事です。
プレイヤーが「ココは何も無い」と思い込んでしまい、シナリオ進まなくなりませんかねw