幻日幻月環

作成した伺かの更新情報などをつぶやくところ

なで時間の調整

2016/06/11追記
里々wikiにより簡単な方法を記述したので、里々wikiの内容を試してみてください。
一応、この記事も里々での処理作成において、理解の助けになると思われるので残しておきます。
----
2016/01/15修正

----
里々のちょっとしたロジックを提供するコーナー。
全て、里々wikiukadocの情報の組み合わせで作ります。
里々のサンプルゴースト「Rポストと狛犬」を書き換えて自ゴーストを作るくらいの知識が必要です。

今回は、「なで時間の調整」。
たとえば、頭は今までどおりになでれば反応して、口とか、手とか、領域の小さな部分はほんのちょっとなでれば反応する。
比較的簡単に実装する方法を示します。

詳細は続きに。
----
使うもの
----
Rポストと狛犬
このゴーストの中身を改変して、動作を確認します。

----
今回触るファイル
----
フォルダ
 R_POST_and_KOMAINU\ghost\master\
ファイル
 dic01_Base.txt
 dic03_Menu.txt

----
なで反応の発動条件
----

さて、里々でゴーストを作っているなら、特に気にせず「*0headなでられ」とすれば作れてしまうなで反応。
実際には、マウスが、なで対象(上記の例で言えば、sakura側の頭)で動くと、回数がカウントされます。
これが、60回に達すると、なでられた!と里々が判断して、「*0headなでられ」を呼び出してくれます。
この60回という数、$なでられ反応回数という変数の値を変えることで、変更できます。

dic01_Base.txtの14行目あたりに追加、太字が追加する内容。

*OnSatoriLoad
$文「*」の重複回避 有効、起動中
$単語群「*」の重複回避 有効、トーク中
$なでられ反応回数 20
#空白はタブ文字。


上記のように設定すると、全てのなで時間が1/3となります。
ポストの頭を撫でてみると、反応までが早くなっていることが実感できると思います。
ただ、普通のゴーストは60で使用していることが多いので、ユーザーさんが使う時に違和感を感じないよう、頭なで反応は60にしておきたいところですね。

----
部位ごとに時間を変える
----

ポストを例にすると、Headの他に、FaceとLeftEyeとRightEyeという部位を持っています。
ためしに、なでられ反応を追加してみます。
先ほどのコードの、なでられ反応回数を60に戻して、以下のコードを追加して、試してみてください。

dic03_Menu.txtの24行目あたりに追加、太字が追加する内容

*0LeftEyeなでられ
:左目をなでられたよ
*0RightEyeなでられ
:右目をなでられたよ


範囲が狭いのでなでにくく、頭よりもなで反応を出すのか大変です。
ここで、なでられ反応回数を20にしてみると、かなり楽に反応が出せると思います。
ただ、そうすると、頭のなで反応が早くてちょっと違和感があります。

さて、ここから本題。
部位ごとに、なで時間を変えてみましょう。
以下に示す、個別のなでられ反応回数で反応するようにします。
Headは、60
LeftEyeは、20
RightEyeは、20

なでられ反応回数60回で反応する、ということ。
なでられ反応回数20回で3回反応した時、なでられ反応が起こればいいわけです。
書き換えると以下のようになります。
Headは、20を3セット
LeftEyeは、20
RightEyeは、20

変数を1個用意して、回数をカウントすればうまくできそうですね。

まずはもとのなでられ反応を書き換えておきます。
dic03_Menu.txtの14行目、16行目、18行目あたりを変更、太字が追加する内容

*0Headなでられ*ポスト頭なでられ


dic01_Base.txtの15行目あたりに追加、太字が追加する内容。


*OnSatoriLoad
$文「*」の重複回避 有効、起動中
$単語群「*」の重複回避 有効、トーク中
$なでられ反応回数 20
$頭なでられカウント 0
#空白はタブ文字。


dic03_Menu.txtの9行目あたりに追加、太字が追加する内容

*0Headなでられ
$頭なでられカウント=(頭なでられカウント)+1
>ポスト頭なでられ (頭なでられカウント)%3==0

#空白はタブ文字。


これで、頭のなでられ反応回数が60になります。
「(頭なでられカウント)%3==0」は、「$頭なでられカウント」を3で割ったあまりが0の時、つまり、3、6、9・・・の時に条件を満たします。
「(頭なでられカウント)==3」としてはいけません。頭なで反応が1回しか出なくなってしまいます。

----
ちょっと動きが変?
----

さて、上記だとちょっとおかしな動作をします。
それは、途中までなでて、しばらく放っておいてから、またなでた時。
ある程度なでておいて(具体的には、頭なでられカウントが2までたまった時)、しばらく放置して、もう一度なでると、すぐに反応してしまいます。
普通の0Headなでられでは、こんな動きじゃなかったはずです。
里々ではどうしているのか?
$なでられ持続秒数という変数で判断しているようです。
初期値は2。なでが2秒とまったら、なでられ反応回数を0にリセットしているようです。
これも、なるべく同じかたちで実装したいところですね。
2秒後に、何か処理をするには、タイマを使います。
さっそく、実装してみましょう。

dic03_Menu.txtの10行目、13行目あたりに追加、太字が追加する内容

*0Headなでられ
$頭なでられカウント=(頭なでられカウント)+1
$頭なでられ初期化タイマ 2
>ポスト頭なでられ (頭なでられカウント)%3==0

*頭なでられ初期化
$頭なでられカウント=0

#空白はタブ文字。


これで、本来のなでられ反応回数60と比べて、操作感がほとんど同じになりました。
他に、胸とかも60にしたい場合は、これと同じような処理を書く必要があります。
「*0Bustなでられ」と記述し、上記のコードをコピーして、「頭」を全て「胸」に置き換えればOKです。
dic01_Base.txtの*OnSatoriLoadに「$胸なでられカウント【タブ】0」を記述するのを忘れないでください。

----
上記は里々で行うためのものですが、YAYAなどで作成している方であればOnMouseMoveで上記と同様の処理していることが分かると思います。
実際、里々では辞書内に「OnMouseMove」の記述がない場合に「0Headなでられ」などを呼び出す反応を補完しています。
「OnMouseMove」を辞書内に記述し、何かトークを出力してしまうと、「0Headなでられ」などは呼び出されなくなり、自分で処理を書く必要があります。
この方法の利点は、既存のサンプルゴーストに対して変更が小さいことです。
PageTop

コメント


管理者にだけ表示を許可する