無限ワンナップ!?(質問掲示板

投稿:      mini happyyuya 投稿:2012/11/12 21:35:12(最新:2012/11/14 22:32:14)
http://page.rmake.jp/wikis/55
に載っているスクリプトを、一人用に組み替えて、
開始スクリプトに
setVariable("経験値",0)
setVariable("累積総合経験値",0)
setVariable("次のレベルまで",10)
def expcheck( point )
setVariable("経験値",getVariable("経験値")+point)#経験値にpointがプラス
setVariable("累積総合経験値",getVariable("累積総合経験値")+point)
#累積経験値にpointがプラス
while getVariable("次のレベルまで") <= getVariable("経験値")
#経験値が次のレベルまでより多ければプレイヤーがレベルアップ
levelUp()
speak("レベルアップ!")
setVariable("経験値",getVariable("経験値")-getVariable("次のレベルまで"))
#経験値から次のレベルまでを引く
getVariable("次のレベルまで",2*getVariable("次のレベルまで"))
#次のレベルまでを二倍
end
end
敵キャラ倒した時のところに
speak("経験値が2入った")
point=2
expcheck( point )
と書いてみたのですが、
本来なら
敵一体倒す→経験値足りない→レベルアップしない
ってなるはずが
なぜか
敵一体倒す→なぜかレベルアップ!ってなる→無限にレベルが上がる。
ってなるんです。何回も見直してみたのですが、自力では限界です。
それとも何か初歩的なミスをしているのでしょうか。
見づらくてすいません

コメントする

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

コメント一覧

Cdv30200 aoi icon mini aoihikawa(投稿日:2012/11/12 22:33, 履歴)
スクリプトを記述する場合
Rmake記法を利用すると
見やすくできます




というわけで、読みやすく直してみたところ

<開始スクリプト>
setVariable("経験値",0) 
setVariable("累積総合経験値",0) 
setVariable("次のレベルまで",10) 

def expcheck(point) 
  #経験値にpointがプラス
  setVariable("経験値", getVariable("経験値") + point) 
  #累積経験値にpointがプラス 
  setVariable("累積総合経験値", getVariable("累積総合経験値") + point) 
  
  while getVariable("次のレベルまで") <= getVariable("経験値") 
    #経験値が次のレベルまでより多ければプレイヤーがレベルアップ 
    
    levelUp() 
    speak("レベルアップ!") 
    
    #経験値から次のレベルまでを引く 
    setVariable("経験値",getVariable("経験値") - getVariable("次のレベルまで")) 
    
    #次のレベルまでを二倍
    getVariable("次のレベルまで", 2 * getVariable("次のレベルまで")) 
  end
end 


<敵キャラ倒した時のところ>
speak("経験値が2入った") 
point=2 
expcheck(point)


expcheckユーザ関数内
次のレベルまでを二倍、としている処理で
使用している関数が間違っています
     mini happyyuya(投稿日:2012/11/13 08:10, 履歴)
getVariable→setVariableに直しましたが、やはり無限ワンナップしてしまいます。
そもそも、敵を倒したときに手に入る経験値は2に設定しているので、レベルアップになる自体おかしいんではないでしょうか?
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/11/13 23:03, 履歴)
どこかほかの箇所で問題が発生しているか
一部のイベントが正しく動作(発生)していない
可能性があると思います

一度、各処理ごとに分割
コメントアウトなどを利用して
1つずつ原因を
調べてみてはいかがでしょうか
     mini happyyuya(投稿日:2012/11/14 08:56, 履歴)
数値を一つ一つ表示してみたところ、「次のレベルまで」「経験値」「累積総合経験値」が
nullになっていることがわかりました。たぶんここら辺が
無限ループの原因かもしれません。
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/11/14 20:45, 履歴)
開始スクリプトで
setVariable関数が
うまく動作していない
(開始スクリプトが
正常に動作完了していない可能性もある)か、

どこかのタイミングでデータが
おかしな状況になっている
可能性がありますね



なお、expcheckユーザ関数のはじめのところで
if !getVariable("経験値")
  setVariable("経験値",0)
  setVariable("累積総合経験値",0)
  setVariable("次のレベルまで",10) 
end  

とする方法もあります
     mini happyyuya(投稿日:2012/11/14 21:29, 履歴)
どうしても他に打開策がなかったので
if !getVariable("経験値")
  setVariable("経験値",0)
  setVariable("累積総合経験値",0)
  setVariable("次のレベルまで",10) 
end

を追加すると、うまくいきました。なんかもやもやするけど、解決は解決です!!
いままで4日くらい?付き合って下さったaoihikawaさんありがとうございました^^このくらいの問題自分で解決できるようになりたいです
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/11/14 22:32, 履歴)
原因の調査、
仕組みの理解、
そして解決法

基本の箇所はしっかりと
マスターされているようですので、
ある程度パターンを覚えてくれば
難しいことではないですよ

ささやかながら
応援しております。