変数でまたわからなくなってしまった(質問掲示板

投稿: 002 1  mini ugonight 投稿:2011/09/04 17:57:04(最新:2011/09/05 00:06:05)
何回か調べると反応が変わるようにしたいのですが…
if getFlag("像")
case zou
when 1
speak("どうやらここは校長室だったようだ…")
zou==2
when 2
speak("カツラが明らかに不自然だ…")
zou==3
when 3
case speakWithSelect(2,"はい","いいえ", 
    "カツラをとってみますか?")
  when 0
    speak("カツラを手に入れた!!")
    setVariable("カツラ", 1)
    setEventDirection("event3",getUpDirection())
    zou==4
  when 1
    
end
when 4
speak("よく見たら頭に何やらメッセージが!!")
speak("「パスワードは誰もわからんじゃろなにしろわしの好きなものを知ってないとな~」")
speak("この像、よく見ると焼き鳥をくわえている…\nどっからそんな自信が来るのか…")
end
else
setFlag("像", true)
zou==1
end

とすると
1回目で
line: 27 not defined variable : zou
2回目以降で
line: 2 not defined variable : zou
となってしまいます…

あと、めんどくさいからここで言っちゃうんですがフィードインしながら音を再生すると音がめっちゃうるさくしかも雑音が入るというバグが発生しています。かっこいいとこなのでどうにかしてほしいです…

コメントする

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

コメント一覧

002 1  mini ugonight(投稿日:2011/09/05 00:06, 履歴)
ちなみにカツラです。
カツラを穴にかぶせた時ふいちゃいましたww

あとBGMが全く治りませんね…再生方法を変えるか…
002 1  mini ugonight(投稿日:2011/09/04 23:55, 履歴)
…というかそれ以前にローカル変数だとだめみたいですね…
無事に出来ました!
なとおときさんのコードの最初に調べたときに変数zouに0を代入して宣言し、また新しい言葉をすぴいておきました!
ついでに穴にカツラが使えるようにも…!
002 1  mini ugonight(投稿日:2011/09/04 23:41, 履歴)
あっ…皆さんありがとうございます!!!遅れてすみさせん!!!
==と=ですか…確かにあやふやでしたね…
早速やってみます☆

グーグル翻訳…完全に英文しかないページってありますよねーソフトウェアのページとかだと紹介されてても英文だと信用しにくいし…らんぐあげとか書いてないし…使ってみます☆ありがとうございました。
Material 71926 1 mini なとおとき(投稿日:2011/09/04 18:47, 履歴)
グーグル翻訳

結構便利ですよ(゜∀゜)

自分で読めればいいですが

僕はまだとてもこれを卒業することはできませんw(*´∀`*)
Material 71926 1 mini なとおとき(投稿日:2011/09/04 18:41, 履歴)
if getFlag("像")

if getVariable("zou") == 0
speak("どうやらここは校長室だったようだ…")
setVariable("zou", getVariable("zou") + 1)

elsif getVariable("zou") == 1
speak("カツラが明らかに不自然だ…")
setVariable("zou", getVariable("zou") + 1)

elsif getVariable("zou") == 2
case speakWithSelect(2,"はい","いいえ",
"カツラをとってみますか?")
when 0
speak("カツラを手に入れた!!")
setVariable("カツラ", 1)
setEventDirection("event3",getUpDirection())
setVariable("zou", getVariable("zou") + 1)
when 1

end
elsif getVariable("zou") == 3
speak("よく見たら頭に何やらメッセージが!!")
speak("「パスワードは誰もわからんじゃろなにしろわしの好きなものを知ってないとな~」")
speak("この像、よく見ると焼き鳥をくわえている…\nどっからそんな自信が来るのか…")

end
else

setFlag("像", true)
end

僕がこれをやるとこうなりますね
一応えらーはでません
   mini ___(投稿日:2011/09/04 18:16, 履歴)
ifやcaseのネストは自ずと見づらくなるので、
もう一段階 字下げすると見やすいかも。
if getFlag("像")
 case zou
  when 1
   speak("どうやらここは")
   zou==2
  when 2
   speak("カツラが明らかに")
   zou==3
  when 3
   case speakWithSelect(2,"はい","いいえ", 
       "カツラをとってみますか?")
    when 0
     speak("カツラを手に入れた!!")
     setVariable("カツラ", 1)
     setEventDirection("event3",getUpDirection())
     zou==4
    when 1
   end
  when 4
   speak("よく見たら頭に")
   speak("「パスワードは誰も」")
   speak("この像、よく見ると")
 end
else
 setFlag("像", true)
 zou==1
end


さて、内容についてですが、
「基本変数」と「ローカル変数」の違いをもう一度ご確認ください。

一回目。if文で、下の方に飛んで
setFlag("像", true)
zou==1
が実行されます。で、イベント終了。
この時にエラーが出ているわけですが、
代入「=」と比較「==」を間違えています。
zouという値は存在していないのに中身を比較しようとしているので、
エラーを吐いているみたいですね。
正確には「zou = 1」です。

次に、2回目に話しかけたとき、if文で2行目に行きます。
そこでcase文で変数zouを見るわけですが、ここでエラーが出ます。
zouという値は先ほど設定したはずなのに、何故?
それは、変数zouがローカル変数だからです。

ローカル変数はsetVariableでの基本変数と違い、
「イベントが終了した時点で消滅」します。
つまり、この時zouという変数は存在していないんですね。
という訳で、zouなんて無いよとエラーを吐くわけです。

イベントを超えて値を保持させるためには、
setVariableを用いて基本変数として設定してやる必要があります。
 参考/Wiki/変数

長文乱文失礼しました。
何かあればまたどうぞー。
Material 71926 1 mini なとおとき(投稿日:2011/09/04 18:15, 履歴)
ライン:27定義されていない変数:zou

ってことは

イベントが終わったらすぐに消えちゃう変数だったとか

通常変数にすればいいんだと思う

getVariable("zou")