Pythonで推し鑑賞スマホアプリを作る3 恋愛シミュレーションゲームみたいになってきた
前回、時計を表示して、時計アプリみたいになりました。
背景を変えてみる
時計をドンと表示するのも実用性があっていいけれど、なんか殺風景。
背景が何もないのがダメなんかなぁ、と思って素材を探すとよさそうなのを見つけました。
色的にも冥鳴ひまりに合いそう。
ということで、さっそくこれを背景にして作り直してみる。

恋愛シミュレーションみたいになってきた(笑)
推しを真ん中に配置したので、時計は小さく左下に。
背景画像が、日中や夕方、夜などあるので、時間に応じて変わるように作ってみる。
睡眠モード
夜(23時〜翌朝5時)は、寝るようにする。
ショートスリーパーだな。
寝ているときに、zzz、みたいな表現出したいので、zを定期的に出して、ふわ〜っと上に上がって消えるアニメーションをつけてみた。

スマホだと、もうちょいひまりの左上でzが表示されます。
ついでに、冥鳴ひまりの表情は、小さく開けた口と閉じた口を3秒くらいで繰り返して、すやすや感を出すようにしています。
実装
こんなクラスを作って、親ウィジェットから、
Suyaa.float_zzz(self)
でコールしてます。
class Suyaa(BoxLayout):
def float_zzz(obj):
# ラベル作成
label_z = Label(
text="z"
, size_hint=(0.3, 0.3)
, font_size=dp(30)
, color=(1, 1, 1, 1)
, pos=(dp(130), dp(230))
, opacity = 1
)
# ウィジェットに追加
obj.add_widget(label_z)
# アニメーション設定
anim = Animation(x=label_z.x - dp(20), y=label_z.y + dp(50), opacity=0, duration=2)
# 終了後にウィジェット削除
anim.bind(on_complete=lambda anim, widget: obj.remove_widget(widget))
# アニメーション開始
anim.start(label_z)
return日本語フォント
テキストベースでいいので、やっぱりセリフがほしいなぁ、と思ったので、セリフ欄を作る。
すると、時計とかぶるので、時計は排除。
正確には、寝ている間だけ時計表示。
起きている間は、ひまりに時間をしゃべってもらうことにします。
kivyは、デフォルトで日本語対応していないので、日本語フォントを用意してあげないといけないです。
ここからフォントをダウンロード。
解凍するといろいろ入っています。
今回は、NotoSansJP-Regular.ttf を使いました。
ttfをプロジェクトの.pyがある階層より下に配置。

kvファイルでフォントを指定する。

スマホ用に、buildozer.spec のビルド対象拡張子にttfを追加する。
これをしないと、PCではOKでも、スマホで起動した途端落ちてしまう。

これで、このラベルに関しては、日本語表示がOKになります。

あとは、しゃべらせる内容を精一杯組んでいくだけです。
ってまぁここが結局力技ですが。
そろそろ完成にしようかな…
と思ったけど、もういっそここからRSSリーダーにしていこうかと思います。
続く…
