自分で何とかやってみたけど…(質問掲示板)
投稿:
退会したユーザー
投稿: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
と開始スクリプトに入れ、(ボカァはおふざけで入れました)
コメントする
コメントするには、ログインする必要があります。
コメント一覧
あ、そうだったのですね、文章消しておきます
いやいや、そのwikiのレベルアップは、経験値制ではなく敵を倒した数と種類から計算するタイプです。
同じ奴ばっかり叩いてると、そのうち全く上がらなくなるという凄い謎の技術でつくられておりますw
経験値をカウントするなら、おそらくコレ
・スクリプト/配列を使わない経験値制Lvアップ
そして2D_RPGでパーティを組む場合は
・スクリプト/冒険に役立つスクリプト
ただし仕組みが全く同じなこのふたつ、つくる際の注意点として「バランス調整が非常に大変」な事が挙げられます。
次々と現れる各敵の経験値をいくつに設定して、レベルがいくつからいくつに上がるには、これまたいくつ必要なのか~なんて全部考えて敵を配置または出現確率を設定しないといけません。
出現確率の方はそりゃもう100回200回のテストプレイは当たり前な世界が待っています、間違いなく。
というのを踏まえて、今回の「経験値%5==0」てのは凄く判り易くて単純で良いかと思います。
まぁ、ゴブリン倒して経験値1だったのに、巨大ドラゴン倒しても経験値2しか…みたいな世界の可能性が高いですが、そこは先へ進んでみようと思わせるゲームの展開に期待ですねー
同じ奴ばっかり叩いてると、そのうち全く上がらなくなるという凄い謎の技術でつくられておりますw
経験値をカウントするなら、おそらくコレ
・スクリプト/配列を使わない経験値制Lvアップ
そして2D_RPGでパーティを組む場合は
・スクリプト/冒険に役立つスクリプト
ただし仕組みが全く同じなこのふたつ、つくる際の注意点として「バランス調整が非常に大変」な事が挙げられます。
次々と現れる各敵の経験値をいくつに設定して、レベルがいくつからいくつに上がるには、これまたいくつ必要なのか~なんて全部考えて敵を配置または出現確率を設定しないといけません。
出現確率の方はそりゃもう100回200回のテストプレイは当たり前な世界が待っています、間違いなく。
というのを踏まえて、今回の「経験値%5==0」てのは凄く判り易くて単純で良いかと思います。
まぁ、ゴブリン倒して経験値1だったのに、巨大ドラゴン倒しても経験値2しか…みたいな世界の可能性が高いですが、そこは先へ進んでみようと思わせるゲームの展開に期待ですねー
レベルアップの仕組みを
まとめたものが
こちらのWikiページになると思います。
「%」は余りを求める計算式で、
条件式を「 == 0」にすることにより
余りがゼロ、
つまり今回の場合は、
5の倍数となったときを条件成立と
判断する仕組みになっています。
まとめたものが
こちらのWikiページになると思います。
「%」は余りを求める計算式で、
条件式を「 == 0」にすることにより
余りがゼロ、
つまり今回の場合は、
5の倍数となったときを条件成立と
判断する仕組みになっています。
パーセントの方がいいかな?
出来ました!ikosamiさん、簸川葵様ありがとうございました^^
これWikiに掲載してもいいかな…?
これWikiに掲載してもいいかな…?
えーと、こういうことですかね?
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
開始スクリプトにレベルアップを入れてはいけないのですね、以後、気を付けます
なるほど、ユーザー定義関数とはこういう時に使うんですね、参考になりました
そもそも、
開始スクリプト
敵のスクリプト
の流れで動きますから、
開始スクリプトに
Lvアップのスクリプトがあっても
戻ってきません。
開始スクリプトへ戻すためには
ユーザ関数としてスクリプトを準備しておき、
敵のスクリプトの最後で、そのユーザ関数を
呼び出してあげる必要があります。
開始スクリプト
敵のスクリプト
開始スクリプト
敵のスクリプト
の流れで動きますから、
開始スクリプトに
Lvアップのスクリプトがあっても
戻ってきません。
開始スクリプトへ戻すためには
ユーザ関数としてスクリプトを準備しておき、
敵のスクリプトの最後で、そのユーザ関数を
呼び出してあげる必要があります。
開始スクリプト
#使用する変数の準備
setVariable("経験値", 0)
#ユーザ関数の準備
def LvUP()
if (getVariable("経験値") % 5) == 0
#LvUP処理
speak("レベルアップ!")
end
end
敵のスクリプト
#倒した後
setVariable("経験値", getVariable("経験値") + 1)
#ユーザ関数を呼び出す
LvUP()
あれ、まだ作動しません。。。
setVariableの文を消してみたんですけどダメでした・・
setVariableの文を消してみたんですけどダメでした・・
そっか!elsifを使えばよかったのか、
あれ、setVariableって変数設定じゃなかったんかな?
まあいっか、ありがとうございますやってみます
まあいっか、ありがとうございますやってみます
あと、こういう場合は、
と省略して書けますよ。
もっと短くもできますが、ややこしくなるのでやめておきます。
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
と省略して書けますよ。
もっと短くもできますが、ややこしくなるのでやめておきます。
切れたw続き↓
敵には
と入れたんですが、処理がされませんでした。
エラーもなしでした。==じゃダメなんですか?もし違うのであれば、どうすればよいのですか?
敵には
speak("50millと1の経験値を手に入れた")
setVariable("レベルアップ経験値ボカァ", getVariable("レベルアップ経験値ボカァ") + 1)
addMoney(50)
と入れたんですが、処理がされませんでした。
エラーもなしでした。==じゃダメなんですか?もし違うのであれば、どうすればよいのですか?
やっとdefの使い方・使い道
の第1歩が理解できた気がするw