【コピペで作る】撫で反応を実装する【伺か・yaya】

ukagaka

前回

【コピペで作る】うちの子を伺かのゴーストにする方法【YAYA】

頭を撫でれるようにしよう

判定をとりたい座標を調べる

ウィンドウズ標準のペイントで確認します。
座標情報が取得できればどのツールでも大丈夫です。
今回は赤枠の範囲を頭として取得します。
枠左上と右下の座標をそれぞれ確認して下さい。
ukagaka_Kesigomu01.png
今回は47,17と175,79でやってみます。

頭部の判定を設定する

shell/master/surfaces.txtを編集します。
こちらのcollisionおよびcollisionexの項が部位の判定の設定です。
UKADOC Project Shell設定 – surfaces.txt

今回はシンプルにcollisionを使用して判定を作成します。
surface0-500 の中身をこのように編集しましょう

surface0-500 { 
    //collision優先度,座標横,座標縦,座標横,座標縦,部位名 
    //優先度:座標が被っても低いほど優先される。 
    collision300,47,17,175,79,Head 
} 

辞書ファイルを追加する

撫で反応用の辞書ファイルを作成します。
ghost/masterフォルダを確認してください。
dic_Sample.ukaをコピーして、dic_MouseStroke.ukaというファイルを作成します

#追加後の構成 
└─master 
       descript.txt 
       dic_Boot.uka 
       dic_MouseStroke.uka 
       dic_Sample.uka 
       yaya.dll 
       yaya.txt 
       yaya_emerg.txt 
       yaya_emerg.uka 

辞書ファイルを登録する

ghost/master/yaya.txtを編集します。
先ほど作成したファイルを、yayaが読み込むように以下のテキストを追加します。
dic, dic_MouseStroke.uka

場所はdicdir, system以下でしたら問題ありません。

charset.dic, UTF-8 
charset.cfg, UTF-8 
charset.output, UTF-8 
charset.file, UTF-8 
charset.save, UTF-8 
charset.save.old, UTF-8 
charset.extension, UTF-8 

dicdir, system 

dic, dic_Boot.uka 
//今回追加する行 
dic, dic_MouseStroke.uka 

////logを出力しないようにコメントアウト 
//log, ../../../../TestGhost.log 
ignoreiolog, ID: OnSecondChange 
ignoreiolog, ID: OnMouse 

文字コードを確認する

先ほどコピーして作ったdic_MouseStroke.ukaをメモ帳などで開いてください。
下記のように表示されていますか?
問題なければUTF-8で編集されています。
もし文字化けしているようでしたら、テキストエディタの設定を確認してみてください。

//文字コード対策。 
//あいうえお 

撫で判定に対して動作するようにする。

下記をdic_MouseStroke.ukaに貼り付けてください。
先ほどの文字コード関係は削除してもらって構いません。

LoadMouseStroke { 
    if ( ISVAR( "previousTouchParts" ) == 0 ) { 
        previousTouchParts = "" 
    } 
    if ( ISVAR( "StrokeCount" ) == 0 ) { 
        StrokeCount = 0 
    } 
    MouseStrokeConfig 
} 


UnloadMouseStroke { 
    ERASEVAR( 'previousTouchParts' ) 
    ERASEVAR( 'StrokeCount' ) 
    ERASEVAR( 'StrokeSensitivity' ) 
    ERASEVAR( 'WheelSensitivity' ) 
} 


MouseStrokeConfig { 
    StrokeSensitivity = 40 
    WheelSensitivity = 10 
} 


//パーツ上をマウスが動いた際に実行される 
OnMouseMove { 
    //CharID/touch部位取得/感度 
    StrokeFunction( reference[3] , reference[4] , StrokeSensitivity ) 
} 


//パーツ上でホイールを動かした際に実行される 
OnMouseWheel { 
    //CharID/touch部位取得/感度 
    StrokeFunction( reference[3] , reference[4] , WheelSensitivity ) 
} 


StrokeFunction { 
    _char = _argv[0] 
    _TouchParts = _argv[1] 
    _StrokeSensitivity = _argv[2] 
    //名称のついた部位かどうか 
    if _TouchParts != "" { 

        //継続 
        if ( _TouchParts == previousTouchParts ) { 
            StrokeCount++ 
        //新規 
        } else { 
            StrokeCount = 0 
        } 
        if ( StrokeCount > _StrokeSensitivity ) { 
            StrokeCount = 0 
            EVAL("MouseStroke_%( _char )%(_TouchParts)") 
        } 
        previousTouchParts = _TouchParts 

    //名前の設定されていないところを触った 
    } else { 
        //"else" 
    } 
} 


//頭部撫で 
MouseStroke_0Head { 
    "えへへ" 
} 

dic_Boot.ukaに追記する。

//関数OnGhostLoadとOnGhostUnloadにそれぞれ下記を追加します。 
OnGhostLoad { 
    //ssp/ghost/ghost_name/ghost/master 
    GHOSTPATH = REPLACE( SHIORI3FW.Path , '\' , '/' ) 

    //追加 
    LoadMouseStroke 
} 


OnGhostUnload { 
    ERASEVAR( 'GHOSTPATH' ) 
    //追加 
    UnloadMouseStroke 
} 

小言

//このようにコメントを残しておくと大規模なファイル数になったあとに救われます。 
OnGhostUnload { 
    ERASEVAR( 'GHOSTPATH' ) 
    // ./dic_MouseStroke.uka 
    UnloadMouseStroke 
} 

動作をテストする。

SSPを起動、すでに起動しているならばゴースト切り替えからもう一度呼びなおしてみてください。
指定した範囲で撫で動作が機能していますか?
今回は一緒にホイールも実装していますが、同じ動作をしていますか?

そのほか

ツールを使って当たり判定を作成する

ツール:さとりすと/サーフェスビューワでGUI上で設定できるようです。
wikiがあるようなので使い方はそちらに甘えます。
各ウインドウの解説/サーフェスビューワ – さとりすと Wiki
さとりすと – 一点の曇りもない

関数名の重複について。

yayaでは同じ関数名があるとエラーを起こします。
これは他のファイルにわたっても同じで
AファイルとBファイルに同じ関数名があると問題が起きます。

とくにOn…から始まる関数は伺かがイベントを拾ってくる関数なので、コピペするときは特に気を付けましょう。

他部位に対しての動作

今回は下記の二種のイベントを実装しました。

  • OnMouseMove
  • OnMouseWheel

触れた場所が定義されていたらならば
以下のような関数が呼ばれます。

//MouseStroke_キャラ番号部位名 { 
//} 

今はメインキャラしか実装していないのでキャラ番号は0を。サブキャラを実装して、サブの頭などの部位を拾いたければ1で判定できます。
例えばsurfaces.txtにメインキャラの体や目や手の部位を作ったならば、下記のようにすればそれぞれの反応を用意できるようになります。

MouseStroke_0Head { 
    "セリフ" 
} 
MouseStroke_0Body { 
} 
MouseStroke_0Eye { 
} 
MouseStroke_0Hand { 
} 

次回

表情の変化を実装予定です。
【コピペで作る】表情の変化を実装する。【伺か・YAYA】