emoticon関数

投稿者:            mini mosmoss 投稿日:2016/10/29 12:09

サイト「ぴぽや」様の感情アイコン素材と効果アニメ再生関数を利用した
感情表現アイコンを表示するemoticon関数です


使い方(RPGエディタを想定しています)
1、emoticon関数を開始スクリプトにコピペする
2、使う素材の一枚絵二枚を使うマップに登録する
3、使いたいアイコンのスプライト番号を確認
4、アイコンを表示させたい場所の画面座標を調べる
5、表示させたいイベント内にスクリプトを書く



1、下の関数を開始スクリプトにコピペします
#emoticon関数
#スプライト縮小に対応するためのスプライト設定関数
def setSpriteRect2(img,imgw,imgh,x0,y0,w0,h0,x1,y1,w1,h1)
  w2=imgw/512
  h2=imgh/384
  if w2>h2
    setSpriteRect(img,x0/w2,y0/w2,w0/w2,h0/w2,x1,y1,w1*w2,h1*w2)
  else
    setSpriteRect(img,x0/h2,y0/h2,w0/h2,h0/h2,x1,y1,w1*h2,h1*h2)
  end
end
#感情アイコンを表示、また表示内容を変更する関数
def emoticon(name,x,y,play_no,speed,save,se) #nameは表示したい感情アイコンの番号(名前)、x、yは表示座標(ピクセル単位の画面座標)を表す、何セット感情表現アニメを再生するか、再生スピード、再生終了時にスプライトを消すか残すか(trueかfalse)、同時に再生したい効果音のid(省略可能)

#キャンパスがビジブル状態になっているか否かの判定
#ビジブルでない場合、ビジブル状態にする
#RPGエディタで必要な確認
  if getCanvasVisible()
  else
     setCanvasVisible(true)
  end


#スプライトを作る画像idの選別

#######ここからオプション機能です#######
#呼び出す感情アイコンに名前をつけたいときに編集して使います

     case name
       when  "びっくり"
         name=0
       when  "はてな"
         name=1
       when  "おんぷ"
         name=3
       when  "怒り"
         name=5
       else
     end

#######ここまでオプション機能です#######

#素材画像関連の設定

#指定されたスプライト番号(名前)に対応する素材画像idを変数id(画像)に入れます

if name >= 45
id=312265 #emoticon02の画像id
name=name-45
else
id=312258 #emoticon01の画像id
end

size=32 #エモグラ一コマ四方の大きさ #エモグラ一枚は正方形
imgw=480 #素材画像全体の横幅
imgh=288 #素材画像全体の縦幅
koma=15 #一行あたりのコマ数

#ここからスプライト設定
    img_name = "img_emoticon"
    #画像ハンドル名はimg_emoticonにしてみました
   #お好みで変えてください

    get_x = 0;    get_y = 0;    get_w = size;   get_h = size
    set_x = 0;    set_y = 0;    set_w = size;   set_h = size

    setVariable(img_name, createSprite(id))    
    setSpriteRect(getVariable(img_name),
                  get_x, get_y, get_w, get_h, set_x, set_y, set_w, set_h)
    setSpriteZOrder(getVariable(img_name), 1) #zオーダーはとりあえず1 #レイヤーの前後関係を調節したい場合はここの数値をいじる
    setSpritePosition(getVariable(img_name), x, y) #エモグラ表示位置(ピクセル画面座標)

#スプライトの描画
#スプライト変更
 def setAnimeSprite(img_name,no,w,h,x,y,imgw,imgh,koma)
#スプライト画像のハンドル名、スプライト番号、一コマあたりの横幅、一コマあたりの縦幅、表示位置のx座標、表示位置のy座標、スプライト画像全体の横幅、スプライト画像全体の縦幅、スプライト画像の一行あたりのコマ数
#no(スプライト番号)というのは、スプライト画像の何番目のコマを表示するか、というもの
#スプライト画像の左上から右下へ向かって、1から始まる番号を振っている、0以下にすると何も表示しない

    get_x = 0;    get_y = 0;    get_w = w;   get_h = h
    set_x = 0;    set_y = 0;    set_w = w;   set_h = h

a=floor(no/koma) #行数
b=no-(a*koma) #余

if no<=0
        get_w = 0;    get_h = 0
        set_w = 0;    set_h = 0
elsif no<=koma
        get_x = w*(no-1)
else

  case b
    when 0
        get_x=w*(koma-1)
        get_y=h*(a-1)
    else
        get_x=w*(b-1)
        get_y=h*a
  end #case
end #if no<=0

setSpriteRect2(getVariable(img_name),imgw,imgh,get_x, get_y, get_w, get_h, set_x, set_y, set_w, set_h)

#スプライトの描画
    drawCanvas()
end #def setAnimeSprite


#ここから再生開始
if se #効果音が設定されていれば再生
playSound(se)
else
end #if

play=0
count=0
frame=name*3+1
setAnimeSprite(img_name,frame,size,size,x,y,imgw,imgh,koma)

if speed
speed=speed*1000
else
speed=2000  #スピードを設定しない場合、2と設定した場合と同じ速さで再生
end #if

loop=true
   while loop

      count=count+1

       if count >= speed #スピードを考慮しつつ再生
          count=0
          if frame>name*3+3 #一セット再生するごとにプレイ数をカウント
             frame=name*3+2
             setAnimeSprite(img_name,frame,size,size,x,y,imgw,imgh,koma) #描画
             play=play+1
             frame=name*3+1
           else
             setAnimeSprite(img_name,frame,size,size,x,y,imgw,imgh,koma) #描画
             frame=frame+1
           end #if
        end #if

         if play>=play_no #設定した再生数を満たしたらループ終了
            if save #感情アイコンを残す場合
            else #感情アイコンを残さない場合
            frame=0
            setAnimeSprite(img_name,frame,size,size,x,y,imgw,imgh,koma) #効果アニメを消す
            end #if
           loop=false
         end #if

   end #while loop

end #def emoticon

#感情アイコンを消す関数
def deleteEmoticon()
deleteSprite(getVariable("img_emoticon")) #効果アニメを消す
drawCanvas()
end


上の関数を開始スクリプトにコピペしたら

2、次の一枚絵二枚をクリップして使うマップに登録します


【一枚絵】emoticon_01


【一枚絵】emoticon_02


この素材はサイト「ぴぽや」様http://piposozai.blog76.fc2.com のアイコン素材を
RmakeのRPGエディタで拡張画像として使うために二分割したものです

emoticon01とemoticon02をマップに登録したら

3、使いたいアイコンと、スプライト番号の対応関係を把握します

上の二枚の画像を見てください
左上のビックリマークが0、その隣のはてなマークが1、その隣が2,その隣のおんぷが3、その隣が4,
次の行の怒りマークが5...といった順番で一枚目は0~44まで計45のマークを振ってあります

二枚目は左上のキラキラマーク45から始まり、右下の89番がスプライト番号の最後です

スプライト番号は0や1などと半角英数で書きます
番号だと使いづらい、管理しづらいという人は、関数内のオプション機能を編集して、
"びっくり"、"はてな"など、自分にとってわかりやすい名前をアイコンにつけてみてください
名前を付ける場合は半角クォーテーションマーク""でくくってください

(対応表を作るのは諦めました、すみません・・・)

4、表示させたい場所の座標を確認します

emoticon関数で使う座標は、例えばRPGエディタの場合は
画面の左上を(0,0)、右下を(512,384)とする
ピクセル単位の画面座標です
マップ作りやイベント操作で使う、マップ座標とは違う系統の位置座標なので注意してください



5、イベントエディタに次のように書きます

使用例:感情アイコンを表示して、再生終了後表示を継続するとき
emoticon("おんぷ",64,64,3,2,true)

#emoticon(3,64,64,3,2,true)と書いても表示されるものは同じ
#emoticon(name,x,y,play_no,speed,save,se) 
#nameは表示したい感情アイコンの番号(名前)、x、yは表示座標(ピクセル単位の画面座標)を表す、何セット感情表現アニメを再生するか、再生スピード、再生終了時にスプライトを残すか消すか(trueかfalse)、同時に再生したい効果音のid(省略可能)



使用例:再生終了後も表示を継続させた感情アイコンを消去するとき
deleteEmoticon()


使用例;再生&再生終了後アイコンが消える
emoticon(19,224,160,2,2)


使用例

オブジェクトを調べるとたまに効果アニメが再生したり
emoticonアイコンが表示されます

余談:
表示位置がずれているのは作者にやる気がないためです

コメントする

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

コメント一覧

Material 303531 2 mini mochi3kan(投稿日:2016/10/30 13:23, 履歴)
こんにちは、また画期的なものが生まれましたね!
この関数だと、素材は一枚絵を用意すればいいので管理が楽になりますし、
アイコンも豊富に用意できて一気に面白くなりそうです。

キャラクタだと扱いやすい反面いろいろと煩雑な部分も多く、どちらも一長一短ありますね。
また、キャラクタで作るとどうしても画像にわずかなブレが出るので
それが気になるときもこちらを使うといいかもしれませんね。
            mini mosmoss(投稿日:2016/10/30 19:59, 履歴)
関数ぽんぽんかけるので同じことをキャラクタでやるのに比べて結構楽に感じると思います。
ただ表示位置を綿密にやろうとすると、プレイヤー(あるいはカメラ)の位置決めからする羽目になり面倒もあります。

再生スピードや再生回数を指定できるので、その点はキャラクタより表現できる部分ですね。
Material 86479 3 mini qhqh123(投稿日:2016/10/30 12:58, 履歴)
おおおおー す すごいです
            mini mosmoss(投稿日:2016/10/30 19:48, 履歴)
あああ あ ありがとございます!
Cdv30200 aoi icon mini aoihikawa(投稿日:2016/10/30 11:59, 履歴)
使いやすく纏まれている関数、
良いですね
            mini mosmoss(投稿日:2016/10/30 19:47, 履歴)
簸川さんに関数褒められるの、
ゲーム完成するより嬉しいかもしれませんね
User icon mini taki(投稿日:2016/10/30 00:27, 履歴)
emoticon関数があると会話やアイテム発見などの演出が
華やかになって楽しいですね。

樽の中身はビールがだったとは意外でした。
            mini mosmoss(投稿日:2016/10/30 06:13, 履歴)
ドワーフなのでお酒が好きかと思いまして。
mifaさまなどの作品では感情アイコンキャラクタが効果的にゲームを演出してますね。

アイコンは少ない労力でたくさん使えた方がいいとは思いますが、
作品の文脈によって分かりやすく使えるものは数が限られてくるので、
キャラクタで管理しても十分間に合うかなとも思います。
            mini ネコム(投稿日:2016/10/29 15:30, 履歴)
おぉ!これは使えますね。
効果アニメの方も使わせていただいてますが、
こちらも是非使ってみようと思います。
            mini mosmoss(投稿日:2016/10/29 15:39, 履歴)
ありがとうございます(^ω^)
これはキャラクタで表現した方が扱いやすい場面も多いかもしれませんが
素材を作ったり管理するのが面倒、キャラ枠を確保したい、
などの状況においてはかろうじて使えるかと思います!