2013年2月21日木曜日

ゴースト「tkytk」を拡張してみる その1

tkytk.dllは同じフォルダにあるindex.luaを読み込みます。
なのでまず、index.luaをテキストエディタで開きます。文字コードはUTF-8になっています。

ややこしい処理はだいたいindex.luaの中でうまくやるように書いているので、イベントの処理の追加だけまずは考えます。とりあえず「なで」は欲しいところですよね。

それっぽいイベントをこのサイトで探すと、「OnMouseMove」というのが見つかります。
なのでまずはOnMouseMoveというイベントの定義を追加します。

GET.OnWindowStateRestore=OnWindowStateRestore

という行の下に

GET.OnMouseMove=OnMouseMove

を追加します。これでOnMouseMoveのイベントが発生するとOnMouseMoveという関数(または配列)が呼ばれるようになります。
(GET.OnMouseMoveはGET["OnMouseMove"]とも書けます)

ファイルの一番下に

function OnMouseMove(tbl)
if tbl.Reference4~=nil then
return tbl.Reference4.."\\e"
end
end

を追加します。(OnMouseMoveはReference4にあたり判定識別子が入ってきます)

開発用パレットを開き、リロード→SHIORIを選んでください。
マウスが通過したところの名前がふきだしに表示されるようになったはずです。

でもこれだけだと「なで反応」にはならないですね。物凄い勢いで「マウスが動いたよ」という通知が来ているようです。そこで、「なで」というのは「一定期間同じ判定領域でマウスを動かし続けた」状態だと考えてみます。こんな感じでしょうか。ざっくり日本語で書くと
「前回と同じところでOnMouseMoveが発生したらカウンターを1ふやす。60超えたらカウンターを0にしてメッセージを返す」
みたいな処理になっています。
function OnMouseMove(tbl)
if oldRef4~=nil and oldRef4==tbl.Reference4 then
mousemovecounter=mousemovecounter+1
if mousemovecounter>60 then
mousemovecounter=0
return tbl.Reference4.."をなでたわね\\e"
end
end
oldRef4=tbl.Reference4
end

load()のGET={}の上あたりに
mousemovecounter=0
という一行を足しておきます。 (これをしないとmousemovecounterはnilになってしまうので+1できません)

開発用パレットを開き、リロード→SHIORIを選んでください。かさをなでると「kasaをなでたわね」と表示されるようになったはずです。

※追記

load()の中でmousemovecounterを初期化してもいいんですが、

--mousemovecounterが初期化されてなければ0にする
if mousemovecounter==nil then
mousemovecounter=0
end
 を
function OnMouseMove(tbl)
の直下に入れてしまった方が自然かもしれないですね(毎回nil判定が入りますが…)

0 件のコメント:

コメントを投稿

Google