跳到正文
zenn · 游戏开发社区· 来源· ソラペン·· 3 天前AI 评分37

放置RPG《StellarRise》已作为个人开发项目发布——在Android上踩过的坑与离线进度的实现方法

放置RPG『StellarRise』を個人開発でリリースしました──Androidで踏んだ沼とオフライン進行の作り方

正文 · 原文

StellarRiseとは

StellarRise は、武器を自動で生成・合成・強化しながらステージを進める放置系RPGです。Google Playで公開しました。

操作はほとんど要りません。起動していれば武器が勝手に生成され、合成して星を上げ、戦闘も自動で進みます。やることは「溜まった武器を合成する」「強化ボタンを押す」くらいで、隙間時間に少し触るだけでも育成が進む作りにしています。

StellarRiseのタイトル画面。星空を背景に剣を掲げたキャラクターと、黄色いSTARTボタン

作ろうと思ったきっかけ

もともと自分が放置ゲームを遊ぶのが好きで、いろいろなタイトルを触っているうちに「自分なりの理想形を一度作ってみたい」と思ったのが出発点です。武器を自動で拾って合成して、数字が伸びていくのを眺める——このジャンル特有の気持ちよさを、自分が面白いと思う配分とテンポで組み上げてみたくなりました。

機能紹介

中心になるのは武器の合成です。同じ★の武器が2つ揃うと合成でき、1段階上の★に昇格します。放っておくだけでスロットに武器が貯まっていくので、満杯になったら合成するだけです。

ホーム画面。ステージ進行とコイン/ジェムの所持数、ATK倍率が表示されている

★を上げ続けると武器の種類自体も増えていき(★2解放→★3解放→…)、強化タブでは生成確率そのものも底上げできます。コインでの固定強化は序盤だけの補助で、中盤以降は★生成と輝石(恒久強化用のプレステージ通貨)が伸びの中心になります。

武器タブ。★2〜★6の武器がスロットに並び、総攻撃力914・コイン/ジェムの残高が表示されている

オフラインの間の進行はちゃんと計算されて戻ってきます。離れていた時間に応じて、戦闘が進んだ分のコインやジェムをまとめて受け取れます。

★生成タブ。★2生成がLv.1/50、★3生成はロック中と表示されている

攻撃力の伸びが頭打ちになったら、転生でステージとコインをリセットして最初からやり直せます。武器・ジェム・恒久強化は転生後も持ち越せるので、2周目以降は1周目より速く同じ地点を通過できるようになります。

使った技術

言語はKotlinで、画面はAndroidの標準的なView(Fragment + Navigation Component)で組んでいます。画面の状態はFlowで一元管理して各画面がそれを見る形にし、セーブデータはRoomで端末内に、認証付きのクラウドセーブはサーバーAPIとバックグラウンド同期で持つ構成にしました。流行りのJetpack Composeではなく、昔ながらのView体系を選んでいます。


ここから先は、作っている中で実際に悩んだところ・工夫したところの話です。

オフライン進行は「時間を早送りで再生する」形で作った

放置ゲームの肝はオフライン進行です。アプリを開いていない間も武器が増え、合成され、ステージが進んでいる——これをどう計算するかが最初の設計課題でした。

考え方はシンプルで、離れていた時間ぶんを、アプリが起動していたときとまったく同じ処理でその場で早回しする、というものです。普段の進行計算をそのまま流用しているので、「起動中は正しいのにオフライン計算だけ結果がずれる」という食い違いが起きにくくなります。別のロジックを2つ用意して両方のつじつまを合わせ続けるより、1つの処理を2つの文脈で使い回すほうが、作るのも保守するのも楽だと判断しました。

画面の上のほうが隠れて見える不具合

リリース後、一部の画面で上のほうの表示が、画面上部の帯の下に少し潜って見切れる不具合に気づきました。

最初はシステムの余白を自前で計算して足す形で直したつもりだったのですが、端末によっては直っていませんでした。調べていくと、画面上部の共通ナビゲーション部品(ActionBar)が、自分の表示位置を決めるために必要な余白をすでに内部で使い切ってしまっていて、その下にある自分のコンテンツには何も残っていなかったことが分かりました。見た目には正しく表示されている帯の裏側で、実は余白の取り合いが起きていたわけです。

最終的には、その共通部品を使うのをやめて自分で組んだツールバーに差し替え、余白の配分も自分の手で決めるようにして解決しました。フレームワーク側の挙動に乗っかるのをやめて、自分で全部コントロールする形にしたということです。

押した瞬間に即購入してしまうボタン

強化画面の連打購入ボタンで、スクロールしようとしただけなのに意図せず購入してしまう不具合がありました。

原因は、指が触れた瞬間に購入処理を呼んでいたことでした。長押しで連続購入できるようにするための作りだったのですが、これだと指がボタンに触れた時点でもう購入が確定してしまい、その後スクロールに切り替えようとしても手遅れでした。

直したのは、購入の判断を「指を離したとき」まで遅らせることです。普通にタップしたときだけ1回購入し、そのまま押さえ続けたときだけ連打購入が始まり、スクロールしようとして指が動いたときは何も起きない——という、ごく普通のボタンの挙動に組み直しました。長押し連打という特殊な動きを足したせいで、タップやスクロールという当たり前の動きのほうが壊れていた、という話です。

起動時のダイアログが2つ同時に出る

新規プレイヤーの初回起動時に、チュートリアルガイドとログインボーナスのお知らせが同時に重なって出てきて、文字が混ざって読めなくなる不具合がありました。

もともとお知らせ系のポップアップは「同時に出ないようにする」仕組みを持っていたのですが、あとから追加したチュートリアルガイドだけが、その仕組みの輪に入らず単独で表示される作りになっていました。普段は困らなくても、初回起動時だけは複数のお知らせの条件がほぼ同時にそろうため、ここで衝突が起きていたわけです。

直したのは、チュートリアルガイドもその仕組みに参加させて、決まった順番で1つずつ出るように一本化したことです。「衝突しないようにしたつもり」の仕組みに、あとから足した要素が乗れているかを都度確認する必要がある、という教訓でした。

公開しています

StellarRise

武器の自動生成・合成・強化、オフライン進行、転生による周回──放置ゲームとして遊びたい方にも、Androidの実装で踏んだ具体的な沼に興味がある方にも、何か持ち帰ってもらえたら嬉しいです。

GitHubで編集を提案

来源:zenn · 游戏开发社区 · zenn.dev