自分で何とかやってみたけど…(質問掲示板

投稿: User icon mini 退会したユーザー 投稿:2011/12/12 18:34:12(最新:2012/02/18 13:50:18)
自分で2DアクションRPGのレベルアップスクリプトを作ってみたんですが、作動しません。
規定数の敵を倒してもレベルアップ処理がされません

setVariable("レベルアップ経験値ボカァ", 0)
if getVariable("レベルアップ経験値ボカァ")==5
speak("レベルアップ!")
levelUp()
end
if getVariable("レベルアップ経験値ボカァ")==10
speak("レベルアップ!")
levelUp()
end
if getVariable("レベルアップ経験値ボカァ")==15
speak("レベルアップ!")
levelUp()
end
if getVariable("レベルアップ経験値ボカァ")==20
speak("レベルアップ!")
levelUp()
end
if getVariable("レベルアップ経験値ボカァ")==25
speak("レベルアップ!")
levelUp()
end
if getVariable("レベルアップ経験値ボカァ")==30
speak("レベルアップ!")
levelUp()
end

と開始スクリプトに入れ、(ボカァはおふざけで入れました)

コメントする

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

コメント一覧

Material 71926 1 mini なとおとき(投稿日:2012/02/18 13:50, 履歴)
なるほどこれをきっかけに
やっとdefの使い方・使い道
の第1歩が理解できた気がするw
User icon mini 退会したユーザー(投稿日:2011/12/13 17:51, 履歴)
あ、そうだったのですね、文章消しておきます
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/12/13 00:51, 履歴)
rurun9さま>

確かに、こちらの記事のほうが
今回の例に近いですね。

ありがとうございます。
参考になります。
Nyan mini rurun9(投稿日:2011/12/13 00:07, 履歴)
いやいや、そのwikiのレベルアップは、経験値制ではなく敵を倒した数と種類から計算するタイプです。
同じ奴ばっかり叩いてると、そのうち全く上がらなくなるという凄い謎の技術でつくられておりますw

経験値をカウントするなら、おそらくコレ
スクリプト/配列を使わない経験値制Lvアップ

そして2D_RPGでパーティを組む場合は
スクリプト/冒険に役立つスクリプト

ただし仕組みが全く同じなこのふたつ、つくる際の注意点として「バランス調整が非常に大変」な事が挙げられます。
次々と現れる各敵の経験値をいくつに設定して、レベルがいくつからいくつに上がるには、これまたいくつ必要なのか~なんて全部考えて敵を配置または出現確率を設定しないといけません。
出現確率の方はそりゃもう100回200回のテストプレイは当たり前な世界が待っています、間違いなく。

というのを踏まえて、今回の「経験値%5==0」てのは凄く判り易くて単純で良いかと思います。
まぁ、ゴブリン倒して経験値1だったのに、巨大ドラゴン倒しても経験値2しか…みたいな世界の可能性が高いですが、そこは先へ進んでみようと思わせるゲームの展開に期待ですねー
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/12/12 20:44, 履歴)
レベルアップの仕組みを
まとめたものが
こちらのWikiページになると思います。


「%」は余りを求める計算式で、
条件式を「 == 0」にすることにより
余りがゼロ、

つまり今回の場合は、
5の倍数となったときを条件成立と
判断する仕組みになっています。
User icon mini 退会したユーザー(投稿日:2011/12/12 20:24, 履歴)
パーセントの方がいいかな?
User icon mini 退会したユーザー(投稿日:2011/12/12 20:01, 履歴)
出来ました!ikosamiさん、簸川葵様ありがとうございました^^
これWikiに掲載してもいいかな…?
User icon mini 退会したユーザー(投稿日:2011/12/12 19:57, 履歴)
えーと、こういうことですかね?
def LvUP()
 if getVariable("レベルアップ経験値ボカァ")==5 
   speak("レベルアップ!") 
   levelUp() 
 elsif getVariable("レベルアップ経験値ボカァ")==10 
   speak("レベルアップ!") 
   levelUp() 
 elsif getVariable("レベルアップ経験値ボカァ")==15 
   speak("レベルアップ!") 
   levelUp() 
 elsif getVariable("レベルアップ経験値ボカァ")==20 
   speak("レベルアップ!") 
   levelUp() 
 elsif getVariable("レベルアップ経験値ボカァ")==25 
   speak("レベルアップ!") 
   levelUp() 
 elsif getVariable("レベルアップ経験値ボカァ")==30 
   speak("レベルアップ!") 
   levelUp() 
 end
end
User icon mini 退会したユーザー(投稿日:2011/12/12 19:45, 履歴)
開始スクリプトにレベルアップを入れてはいけないのですね、以後、気を付けます
User icon mini 退会したユーザー(投稿日:2011/12/12 19:45, 履歴)
なるほど、ユーザー定義関数とはこういう時に使うんですね、参考になりました
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/12/12 19:15, 履歴)
そもそも、
開始スクリプト

敵のスクリプト
の流れで動きますから、

開始スクリプトに
Lvアップのスクリプトがあっても
戻ってきません。


開始スクリプトへ戻すためには
ユーザ関数としてスクリプトを準備しておき、
敵のスクリプトの最後で、そのユーザ関数を
呼び出してあげる必要があります。


開始スクリプト
#使用する変数の準備
setVariable("経験値", 0)

#ユーザ関数の準備
def LvUP()
  if (getVariable("経験値") % 5) == 0
    #LvUP処理
    speak("レベルアップ!")
  end
end


敵のスクリプト
#倒した後
setVariable("経験値", getVariable("経験値") + 1)

#ユーザ関数を呼び出す
LvUP()
User icon mini 退会したユーザー(投稿日:2011/12/12 18:53, 履歴)
あれ、まだ作動しません。。。
setVariableの文を消してみたんですけどダメでした・・
User icon mini 退会したユーザー(投稿日:2011/12/12 18:48, 履歴)
そっか!elsifを使えばよかったのか、
User icon mini 退会したユーザー(投稿日:2011/12/12 18:47, 履歴)
あれ、setVariableって変数設定じゃなかったんかな?
まあいっか、ありがとうございますやってみます
Material 7186 1 mini ikosami(投稿日:2011/12/12 18:46, 履歴)
あと、こういう場合は、
if getVariable("レベルアップ経験値ボカァ")==5
  speak("レベルアップ!")
  levelUp()
elsif getVariable("レベルアップ経験値ボカァ")==10
  speak("レベルアップ!")
  levelUp()
elsif getVariable("レベルアップ経験値ボカァ")==15
  speak("レベルアップ!")
  levelUp()
elsif getVariable("レベルアップ経験値ボカァ")==20
  speak("レベルアップ!")
  levelUp()
elsif getVariable("レベルアップ経験値ボカァ")==25
  speak("レベルアップ!")
  levelUp()
elsif getVariable("レベルアップ経験値ボカァ")==30
  speak("レベルアップ!")
  levelUp()
end


と省略して書けますよ。

もっと短くもできますが、ややこしくなるのでやめておきます。
Material 7186 1 mini ikosami(投稿日:2011/12/12 18:40, 履歴)
いやいや、
setVariable("レベルアップ経験値ボカァ", 0)
が最初にあるからですよ(^^;)

リセットしてしまってます。
User icon mini 退会したユーザー(投稿日:2011/12/12 18:36, 履歴)
切れたw続き↓

敵には
speak("50millと1の経験値を手に入れた")
setVariable("レベルアップ経験値ボカァ", getVariable("レベルアップ経験値ボカァ") + 1)
addMoney(50)

と入れたんですが、処理がされませんでした。
エラーもなしでした。==じゃダメなんですか?もし違うのであれば、どうすればよいのですか?