前回書いた「ねこじるし」で、一番こだわったところであり、一番実装が面倒だったのが、解除の条件だ。「画面に見えたら解除する」——言葉にすると1行だが、これが思ったより単純ではなかった。
楽な実装は、収集要素として成立しない
猫や小物は、画面の外でも生成される。内部的にイベントが起きた時点で解除してしまえば実装はずっと楽なのだが、それだと「見ていないものが勝手にコレクションに入る」ことになる。
通知だけが流れてきて、何が起きたのか分からない。集めている実感がまるでない。それは収集要素として成立していない。
なので、対象が実際に画面内へ入った瞬間だけを解除の条件にした。さらに、解除されたときは、きっかけになった猫や小物自身がその場で光るようにした。「何が解除されたのか」が、通知を読まなくても視線の先にある状態を作りたかった。
絵文字の装飾が、実績を解除していた
実装後に見つかった不具合がこれだ。ポスト下部の絵文字装飾が、触れてもいない小物のねこじるしを解除してしまっていた。
「画面内に入ったか」の判定が、装飾用に置かれた要素まで対象として拾っていた。ユーザーから見れば、何も出会っていないのにコレクションが埋まる。まさに避けたかった状態が、別の経路で起きていたことになる。
「見えたら解除」というルールは、何をもって「それ」とするかで細かく破綻する。判定そのものより、対象の線引きのほうが厄介だった。
見ていない時間も、記録が動いていた
もうひとつ、画面を見ていない間も記録が動き続けていた。タブが裏にあるときだけでなく、ウィンドウが他のアプリの背面にあるときも止めるようにした。
ブラウザのタブが表かどうかだけでは足りない。Xのタブを開いたまま別のアプリで作業している時間は、当然ながら見ていない。見ていない時間に勝手に埋まっていくコレクションは、やはり収集要素として成立しない。
あわせて、ねこじるしの監視が不要な画面計測を繰り返していた点も改め、スクロール時の負荷を下げた。常時動く仕組みなので、軽さは機能のうちだと考えている。
光らせすぎ、飛ばしすぎ
解除時に光らせる演出でも、細かい直しが続いた。仲良しイベントでは、すでに解除済みなのに相方の猫だけが毎回光ってしまっていた。解除の瞬間だけ光るのが正しいので、条件を絞った。
引用カードやメディアの上に登っている猫が、仲良しイベントで別の位置へ飛んでしまう不具合もあった。こちらは、そういう場所で休んでいる猫には仲良しイベントを起こさないようにして解決した。
v1.3.0のそのほかの更新
新しい猫「セプト」も仲間入りした。白い靴下と脇腹のハートが目印で、成猫42種・子猫17種の全モーションに対応している。
さらに、繁体字中国語と韓国語を追加して、日本語・英語とあわせた4言語から選べるようにした。設定画面だけでなく、ねこじるしの名前や通知も翻訳している。ちびボードを打つ猫には、前脚が沈むコマに合わせて打鍵のマークが飛び出す演出も足した。
猫(ノルン)のスプライトで、顔の柄が目の上にずれるコマと、背中の白い抜けも直している。こちらは絵を描き直す作業で、コードの話ではなかった。