知られざるRmakeの記述法(雑談掲示板)
      投稿: 
 退会したユーザー
      投稿:2011/12/25 15:39:25(最新:2016/08/07 20:56:07)
    
    
      スクリプト言語のマニュアルでは語られない
様々なスクリプトの裏技を紹介していくスレッドです。
例
case文にelseが使える
    
    ツイート
    様々なスクリプトの裏技を紹介していくスレッドです。
例
case文にelseが使える
a = rand(6) + 1
case a
  when 1
    speak("おめでとう。\n1等が当たった。")
  when 2
    speak("おめでとう。\n2等が当たった。")
  when 3
    speak("おめでとう。\n3等が当たった。")
  else #この場合、ここに来るのは4,5,6
    speak("残念。ハズレだ。")
end
コメントする
コメントするには、ログインする必要があります。
コメント一覧
      知ってる方もいるかもしれませんが
こうやって文字の判定も出来る。
    
        A = "三"
if A >= 0 || A < 0
  speak("数字")
elsif A >= "㐀" && A<= "龻"
  speak("漢字")
elsif A >= "A" && A <= "Z"
  speak("アルファベット大文字")
elsif A >= "a" && A <= "z"
  speak("アルファベット小文字")
elsif A >= "ぁ" && A <= "ゖ"
  speak("平仮名")
elsif A >= "ァ" && A <= "ヺ"
  speak("カタカナ")
elsif A >= "Α" && A <= "Ω"
  speak("ギリシャ文字大文字")
elsif A >= "α" && A <= "ω"
  speak("ギリシャ文字小文字")
else
  speak("それ以外")
end
こうやって文字の判定も出来る。
            初めて知った・・・。
          
        
      warpEvent関数は小数点も入れられる
例)
・・・これってただ僕が気づいていなかっただけ?
    
        
        
        例)
warpEvent("event21", 5.5, 5.5)
・・・これってただ僕が気づいていなかっただけ?
            確認したところ
setEventTarget関数でも可能ということと
デメリットがあることも分かった
当たり判定が大きくなる。
例えば[x1.5 y11.5]のところにイベントがあったとする。
そうした場合当たり判定は下のようになる。
          
        setEventTarget関数でも可能ということと
デメリットがあることも分かった
当たり判定が大きくなる。
例えば[x1.5 y11.5]のところにイベントがあったとする。
そうした場合当たり判定は下のようになる。
          
            これ上手く使えば、setEventTargetとか使わずとも
キャラの移動出来るのでは?
          
        キャラの移動出来るのでは?
      rand関数も小数が入る。
    
  #例 rand(6.4) #この場合、6が0~5の4割の確率で返される
      常識?かも知れないですが
を
とやると
Aを選ぶと0 Bを選ぶと1 になります
    
        cese speakWithSelect(2,"A","B", 
    "AかBか?")
when 0
when 1
end
を
a= speakWithSelect(2,"A","B", 
    "AかBか?")
speak(a)
とやると
Aを選ぶと0 Bを選ぶと1 になります
            この場合、場合分けが簡単にできるという利点が大きいかも。
という分岐を例で考えると、従来の書き方だと
のように処理Bを重複して書く必要があり、片方書き直した後、もう一方を直し忘れるといったミスも考えられます。
この書き方なら
といったように分岐条件と内容が離れているので、フラグを扱う時には便利、かもです。
          
        | 選択肢 | 処理 | 
|---|---|
| A | フラグが立っていればA, 他はB | 
| B | 常時B | 
case speakWithSelect(2,"A","B", 
    "AかBか?")
when 0
   if getFlag("フラグ")
   #処理A
   else
   #処理B
   end
when 1
   #処理B
endのように処理Bを重複して書く必要があり、片方書き直した後、もう一方を直し忘れるといったミスも考えられます。
この書き方なら
choice = speakWithSelect(2,"A","B", 
    "AかBか?")
if (choice == 0) && !getFlag("フラグ")
choice = 1
end
case choice
when 0
   #処理A
when 1
   #処理B
endといったように分岐条件と内容が離れているので、フラグを扱う時には便利、かもです。
      カスタムメニューは左側に偏ってますが、
実は右側にも表示できるようです。
    
  実は右側にも表示できるようです。
#例 setCustomParamName(18, "A") setCustomParamValue(18, "今はテスト") #右上に表示されます
      caseは文字も判定可能
    
        a=createArray()
a[0]=createArray()
a[1]=createArray()
a[2]=createArray()
a[3]=createArray()
a[0]="?"
a[1]="?"
a[2]="?"
a[3]="?"
while i<4
case speakWithSelect(4,"○","△","×","◇", 
    a[0]+a[1]+a[2]+a[3])
  when 0
    a[i]="あ"
  when 1
    a[i]="か"
  when 2
    a[i]="さ"
  when 3
    a[i]="た"
end
i=i+1
end
case a
when "あ,か,さ,か"
#パスワード1の操作
when "あ,た,た,か"
#パスワード2の操作
end
            コレ凄いわ
文字列でもピッタリならcase whenを通る事はしってたけど、配列をまとめて渡す事ができるとは!
コレはパスワード変換とかで大活躍の予感
          
        文字列でもピッタリならcase whenを通る事はしってたけど、配列をまとめて渡す事ができるとは!
コレはパスワード変換とかで大活躍の予感
a=createArray() #直してみた
n=true
while n
 a[0]="?"
 a[1]="?"
 a[2]="?"
 a[3]="?"
 m=0
 while m<4
  case speakWithSelect(4,"あ","か","さ","た",  a[0]+a[1]+a[2]+a[3])
  when 0 a[m]="あ"
  when 1 a[m]="か"
  when 2 a[m]="さ"
  when 3 a[m]="た"
  end
 m=m+1
 end
 case a
 when "あ,か,さ,か"
  speak("あかさか\n合ってる") #パスワード1の操作
 when "あ,あ,あ,あ"
  speak("ああああ\n終"); n=false #パスワード2の操作
 else
  speak("ちがうよ")
 end #case終
end #nループ終
goBadEnding()
      waitTime(0)でも、
とりあえず1回のフレームが終わって次のフレームまで(33ms程度)
は少なくともスクリプトが実行されないようです。
    
  とりあえず1回のフレームが終わって次のフレームまで(33ms程度)
は少なくともスクリプトが実行されないようです。
      >簸川さん
21億・・・普通は超えませんよね(w
    
  21億・・・普通は超えませんよね(w
      if文を1行で書くことができた気がするんです。
しかし、
これだと文法エラーがでました。
実際はどうなんでしょうか?もう少し自分でも調査してみます。
    
  しかし、
if 条件 then #条件がtrueの時の処理
これだと文法エラーがでました。
実際はどうなんでしょうか?もう少し自分でも調査してみます。
      >do
→スクリプト/所持アイテムをアイテムIDで削除する関数
コレ見た時から気になってたのはオイラだけなのか…
◆getValueFromItemParam関数の
・返り値はインデックスに対応したアイテムパラメーターの値
が「道具なら0、武器なら1が返る」
という発見はナイスでした。リファレンス説明の足りなさは泣けてきますねw
◆getEquipmentIndexWithId関数の
・返り値は指定したIDのアイテムの装備位置のインデックス
0 武器
1 盾
2 鎧
3 頭
4 足
5~8 装飾品
9~15 魔法
という感じになってる模様。
    
  →スクリプト/所持アイテムをアイテムIDで削除する関数
コレ見た時から気になってたのはオイラだけなのか…
◆getValueFromItemParam関数の
・返り値はインデックスに対応したアイテムパラメーターの値
が「道具なら0、武器なら1が返る」
という発見はナイスでした。リファレンス説明の足りなさは泣けてきますねw
◆getEquipmentIndexWithId関数の
・返り値は指定したIDのアイテムの装備位置のインデックス
0 武器
1 盾
2 鎧
3 頭
4 足
5~8 装飾品
9~15 魔法
という感じになってる模様。
      >rurun9さん
doがあるかどうかで何か違いがあるんですか?
    
  doがあるかどうかで何か違いがあるんですか?
while 条件式 do #繰り返すところ end #この上下で違いはあるのか# while 条件式 #繰り返すところ end
      こんな使い方ってありだったのかww↑
    
  
 
 
 
 
 
 
 
 
RPGエディタで使うsetEventDirection関数の第二引数で
getDownDirection()、getLeftDirection()、getRightDirection()、getUpDirection()のかわりに
0、1、2、3と書くことができる
#例 setEventDirection("event01",3) #setEventDirection("event01",getUpDirection())と同じRPGの演出ではイベントの向きを頻繁に変えるので
製作の時短に使えるほか、条件付けなどを簡単に書ける場合があると思います
「知られざる」というわけではなく関数リファレンスには
こうなりますよ、とはっきり書いてあるのですが
http://rmake.jp/document/function_reference#setEventDirection関数
スクリプト初心者の頃はわからなかったし
入力支援もないので手打ちをがんばってました
数字で書くデメリットとしては書いた本人が向きがよくわからなくなる
ということがあるのかもしれません(他のデメリットもあるかもしれません)
関数の引数として使われる関数にはこのように数字で代用できるものがあり
その一例として、キャラクタやアイテムのパラメータ配列から
値を抜き出す時に使われる関数群について対応する数字を調べて表にしました
http://blog.rmake.jp/mosmoss/7607
キャラクタやアイテムのパラメータ配列の返り値についても書いてあります