メッセージ関数完成!!!

投稿者:      mini きゅうり 投稿日:2013/01/03 18:26

自作のメッセージ関数です。
このスクリプトをアレンジしてもOKです。

ゲームタイプ利用
2DアクションRPGYes
2DRPGYes
ノベルゲームYes


以下の画像を使用しています。



ノベルの場合

#ノベルの場合のスクリプトです。RPGで使うと大きさが画面に合いません。
setCanvasVisible(true)
def eti_age(a, aki, indexs)#インデックス(変数indexs)に数値や文字列を追加する関数
  #a = 配列 aki = 追加する数値や文字列 indexs = 入れるインデックス
  a_n = (getArrayLength(a) - 1)
  while a_n >= indexs
    a_n_pra = a_n + 1 ; a[a_n_pra] = a[a_n] ; a_n = a_n - 1
  end
  a[indexs] = aki
  return a
end

def click_wait()#クリック待ち
  startInput()
  loop = true
  while loop
    while hasInput()
      takeInput()
      if isMouseDown() || isKeyDown("Z")
         loop = false
      end
    end
    waitTime(30)
  end
  endInput()
end

#配列全検索 配列にあるだけ全て探す
def indexOfArray_x(ar, n)
  l = getArrayLength(ar) ; r = createArray()
  r[0] = -1 ; i = 0 ; m = 0
  while i < l
    if ar[i] == n
      r[m] = i ; m = m + 1
    end
    i = i + 1
  end
  return r
end

#配列を一気に設定する関数
def Array(a)
  a = splitString(a, ",")
return a
end

#色は「赤」「黄」「紫」「茶」「灰」「青」「緑」「水」「橙」「白黒」の10色が使えます
setVariable("このゲームで使うメッセージウィンドウの色を指定します", "緑")
#メッセージ関数
def speak_j(n,h)#n = 名前 h : 表示する文字  ## j : 自作のj
  #//////////////////////////////////////////////////
  #ライセンス:自由に利用可(編集可)
  #
  #         メッセージ表示 Ver.1.00
  #
  #原作者:きゃうり アレンジ元:いない 作:きゅうり
  #//////////////////////////////////////////////////
  #1行に約30文字まで入ります。
  #4行まで入ります。
  #改行の2文字等を抜いて、1度に120文字くらいまで表示可能です。
  iro = createArray() ; iro = Array("赤,黄,紫,茶,灰,青,緑,水,橙,白黒")
  i = 0
  while i < 10
    if getVariable("このゲームで使うメッセージウィンドウの色を指定します") == iro[i]
      if i < 5
        messe_g_ID = 165702 ; messe_g_h = 192 * i
      else
        messe_g_ID = 165695 ; messe_g_h = 192 * (i - 5)
      end
    end
    i = i + 1
  end
  messe = createSprite(messe_g_ID)#メッセージウィンドウ
  setSpriteRect(messe, 0, messe_g_h, 800, 180, 0, 0, 800, 180)
  setSpritePosition(messe, 0, 420)
  drawCanvas()
  setTextFontColor(0, 0, 0)
  setTextFontSize(20) ; name_txt = createText(11, 422, 178, 21) ; setText(name_txt, n) ; setTextFontSize(28)
  honbun_txt = createText(15, 449, 769, 137)
  h = splitString(h, "") ; h = eti_age(h, "", 0) ; i = 1 ; skip = 0 ; h_mojisu = getArrayLength(h)
  syasen = createArray() ; syasen = indexOfArray_x(h, "/")
  ssi = getArrayLength(syasen)#斜線略してss それによくあるローカル変数の名前iでssi
  i = 0
  while i < ssi
    if h[syasen[i] + 1] == "n"
      h[syasen[i]] + h[syasen[i] + 1]
    elsif h [syasen[i] + 1] == "\""
      qw = 1
      while (syasen[i] + qw) < h_mojisu
        h[syasen[i]] = h[syasen[i + qw]]
        qh = qh + 1
      end
      popArray(h)
    end
    i = i + 1
  end
  kaigyou = createArray() ; kaigyou = indexOfArray_x(h, "/n") ; po = 0
  honbun_txt = createText(15, 449, 769, 137)
  startInput()
  while h_mojisu > i
    while hasInput()
      takeInput()
      if isMouseDown() || isKeyDown("Z")
        skip = 1
      end
    end
    if skip == 1
      s = sliceArray(h, i, (h_mojisu - i)) ; s = joinArray(s, "") ; h[0] = h[0] + s ; i = h_mojisu
    else
      h[0] = h[0] + h[i]
    end
    setText(honbun_txt, h[0])
    i = i + 1
    waitTime(15)#表示速度(ミリ秒)
  end
  endInput() ; setTextFontColor(255, 255, 255)
  click_wait()
  deleteText(name_txt) ; deleteText(honbun_txt)
  deleteSprite(messe)
  drawCanvas()
end


RPGの場合

#RPGの場合のスクリプトです。ノベルで使うと大きさが画面に合いません。
setCanvasVisible(true)
def eti_age(a, aki, indexs)#インデックス(変数indexs)に数値や文字列を追加する関数
  #a = 配列 aki = 追加する数値や文字列 indexs = 入れるインデックス
  a_n = (getArrayLength(a) - 1)
  while a_n >= indexs
    a_n_pra = a_n + 1 ; a[a_n_pra] = a[a_n] ; a_n = a_n - 1
  end
  a[indexs] = aki
  return a
end

def click_wait()#クリック待ち
  startInput()
  loop = true
  while loop
    while hasInput()
      takeInput()
      if isMouseDown() || isKeyDown("Z")
         loop = false
      end
    end
    waitTime(30)
  end
  endInput()
end

#配列全検索 配列にあるだけ全て探す
def indexOfArray_x(ar, n)
  l = getArrayLength(ar) ; r = createArray()
  r[0] = -1 ; i = 0 ; m = 0
  while i < l
    if ar[i] == n
      r[m] = i ; m = m + 1
    end
    i = i + 1
  end
  return r
end

#配列を一気に設定する関数
def Array(a)
  a = splitString(a, ",")
return a
end

#色は「赤」「黄」「紫」「茶」「灰」「青」「緑」「水」「橙」「白黒」の10色が使えます
setVariable("このゲームで使うメッセージウィンドウの色を指定します", "白黒")
#メッセージ関数
def speak_j(n,h)#n = 名前 h : 表示する文字  ## j : 自作のj
  #//////////////////////////////////////////////////
  #ライセンス:自由に利用可(編集可)
  #
  #      メッセージ表示(RPG専用) Ver.1.00
  #
  #原作者:きゃうり アレンジ元:きゅうり 作:きゅうり
  #//////////////////////////////////////////////////
  #1行に約30文字まで入ります。
  #4行まで入ります。
  #改行の2文字等を抜いて、1度に120文字くらいまで表示可能です。
  iro = createArray() ; iro = Array("赤,黄,紫,茶,灰,青,緑,水,橙,白黒")
  i = 0
  while i < 10
    if getVariable("このゲームで使うメッセージウィンドウの色を指定します") == iro[i]
      if i < 5
        messe_g_ID = 165702 ; messe_g_h = 192 * i
      else
        messe_g_ID = 165695 ; messe_g_h = 192 * (i - 5)
      end
    end
    i = i + 1
  end
  messe = createSprite(messe_g_ID)#メッセージウィンドウ
  setSpriteRect(messe, 0, messe_g_h, 800, 180, 0, 0, 1275, 281)
  setSpritePosition(messe, 0, 269)
  drawCanvas()
  setTextFontColor(0, 0, 0)
  setTextFontSize(12) ; name_txt = createText(8, 268, 109, 16) ; setText(name_txt, n) ; setTextFontSize(18)
  honbun_txt = createText(12, 289, 487, 84)
  h = splitString(h, "") ; h = eti_age(h, "", 0) ; i = 1 ; skip = 0 ; h_mojisu = getArrayLength(h)
  syasen = createArray() ; syasen = indexOfArray_x(h, "/")
  ssi = getArrayLength(syasen)#斜線略してss それによくあるローカル変数の名前iでssi
  i = 0
  while i < ssi
    if h[syasen[i] + 1] == "n"
      h[syasen[i]] + h[syasen[i] + 1]
    elsif h [syasen[i] + 1] == "\""
      qw = 1
      while (syasen[i] + qw) < h_mojisu
        h[syasen[i]] = h[syasen[i + qw]]
        qh = qh + 1
      end
      popArray(h)
    end
    i = i + 1
  end
  kaigyou = createArray() ; kaigyou = indexOfArray_x(h, "/n") ; po = 0
  honbun_txt = createText(12, 289, 487, 84)
  startInput()
  while h_mojisu > i
    while hasInput()
      takeInput()
      if isMouseDown() || isKeyDown("Z")
        skip = 1
      end
    end
    if skip == 1
      s = sliceArray(h, i, (h_mojisu - i)) ; s = joinArray(s, "") ; h[0] = h[0] + s ; i = h_mojisu
    else
      h[0] = h[0] + h[i]
    end
    setText(honbun_txt, h[0])
    i = i + 1
    waitTime(15)#表示速度(ミリ秒)
  end
  endInput() ; setTextFontColor(255, 255, 255)
  click_wait()
  deleteText(name_txt) ; deleteText(honbun_txt)
  deleteSprite(messe)
  drawCanvas()
end


使用例

speak_j("きゅうり","改行も\nダブルクォーテーションも入力可能。\"\n関数の_jを忘れずに。")

コメントする

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

コメント一覧

  1 mini 闇さん(投稿日:2013/02/02 15:25, 履歴)
RPG系のほうを使用させていただきます

長いほうは開始スクリプトにでも書けばいいんですよね?
  1 mini 闇さん(投稿日:2013/02/02 15:55, 履歴)
あれっ? もしかして選択肢できない?
  1 mini 闇さん(投稿日:2013/02/02 17:23, 履歴)
他の素材を使う場合はどうすればいいですか?
ってか使えますか?
      mini きゅうり(投稿日:2013/02/02 18:30, 履歴)
使用ありがとうございます。


長いほうは開始スクリプトでOKです。


選択肢は未実装です。確かに選択肢がないのはまずいな・・・


「日本語ノベルえでぇた」で使えるサイズなら基本的にOKだと思います(未検証)
messe_g_ID変数に画像IDを入れればOKのはずです。
  1 mini 闇さん(投稿日:2013/02/02 20:50, 履歴)
選択肢に関しては不自然にならないようにするので大丈夫ですが

IDを変えるのは65行目、67行目でいいんですか?
  1 mini 闇さん(投稿日:2013/02/02 21:41, 履歴)
どうやら一枚で10色セットのものだとズレてしまうようです
Material 86479 3 mini qhqh123(投稿日:2013/02/02 17:23, 履歴)
なるほどわからない
User icon mini 退会したユーザー(投稿日:2013/01/03 22:40, 履歴)
1文字分解出てきたときからやれそうダナーって思ってたけど
いざやるとこんなになるのか・・・

な に こ れ す ご い
Cdv30200 aoi icon mini aoihikawa(投稿日:2013/01/03 20:32, 履歴)
完成、おめでとうございます
1文字ずつ表示していく仕組みが良いですね

なお、表示処理中のhは上書きせずに
表示用の別の変数にセットしておき、
スキップ時に表示用変数にhをjoinArrayすることで
while文が短縮できると思います
      mini きゅうり(投稿日:2013/01/03 21:06, 履歴)
ありがとうございます。


なるほど、確かに短縮できますね。
やってみます。