私の最初のゲームの開発の歴史

それはすべて、私が「Flappy bird」と呼ばれる超人気ゲームをプレイしたという事実から始まりました。 誰もが彼女をよく知っており、ゲームを説明するのは意味がありません。 しかし、私がまだ言わなければならないことの1つは、ゆるい鳥がその制御の容易さとゲームプレイの複雑さに私を夢中にさせたことです。 何時間も続けてプレイすることができ、突然考えました-同じエキサイティングですが、管理が簡単でコンセプトのゲームを作ることができますか? 簡単で、2週間働きます。 そして、それはすべて始まりました。



どう? 何のゲームを作りますか? これらは私が数日間自問した質問です。 しかし、その後、Valiant Heartsで非常に興味深く刺激的な瞬間が私の頭に浮かびました。 このゲームのあるシーンでは、メインキャラクター(兵士)が爆弾のailの下で走り、ある時点で、シェルの爆発に陥らないように停止する必要がありました。



それで、ゲームのゲームプレイとコンセプトを思いつきました。名前はシンプルです-Crazy Crazy 。 今、この傑作の作成を開始する必要がありました。



画像








グラフィックス



長い間、ゲームに適したグラフィックスタイルを選択できませんでした。 私は次々と走りました。 しかし、最終的に、このスタイルは描画でシンプルで(テクスチャの作成に多くの時間を費やさないように)特別である必要があることに気付きました。 私は常に黒、白、赤の特定のコントラストが大好きで、これは私のゲームに理想的だったので、これらの色合いのスタイルに選択肢がありました。



最初は、覚えておくべき詳細をメインキャラクターでいっぱいにしようとしましたが、他のランナーのキャラクターを見て、それを単純化することを選択しました。 そして私の意見では、それはより良くなっただけです。











アニメーションは古き良き方法で行われました。 彼女はシングルフレームでした。 私は別の方法を知らないので、あまり選択する必要はありませんでした。 ゲームには、ヒーローの走り、ヒーローの立ち止まり、爆弾からの影の出現、爆弾の爆発などのアニメーションがいくつかあります。 それで、私はそれを作るのにそれほど時間を費やしませんでした。











しかし、爆弾の作成により、それはもう少し興味深いことが判明しました。まず、そのテクスチャーの真ん中にファシストのサインを描いて、ボイドがないようにしました。 しかし、先を見据えて、これが最善の解決策ではなかったことをお伝えします。 App StoreとGoogle Playの両方で年齢制限を設定する場合、このアイテムは多くの国で過激派の兆候であるため、このアイテムが考慮されます。











画像








技術部



それで、ゲーム用のソフトウェアの作成を始めました。



試行番号1:

私は、素朴な小さな男の子として、OpenGlを使用してゲームをゼロから作成できると判断しました。OpenGlでは、すでに経験があります(ヘビのような小さなゲームを書いた)。 しかし、Android向けのプログラミングを2週間行った後、私は自分の選択の欠点に気付きました。

1.ゼロから多くのコードを記述する必要があり、多くの時間がかかりました。

2. iosでゲームを再度プログラムする必要がありますが、Swift / Objective-Cをまだ知っている必要があります。 膨大な時間がかかります。



したがって、この方式では夏の初めまでにゲームを終了できないことを認識しました。これは、戦術を変更しなければならなかったためです。



試行番号2:

AndroidとiOS向けのゲームをすばやく作成するには、少数の機能を備えたクロスプラットフォームの無料フレームワークが必要であることがようやくわかりました。 そして、私の選択はLibGDXにかかっていました。 シンプルで明確なドキュメントがあり、AndroidとiOSの両方で動作します。 すぐにHabréの素晴らしい記事に出会いました。[[LibGDX] Flappy Bird-Zombie Birdのクローンを作成します] 。 それの助けを借りて( eliotik記事の翻訳者に感謝します)、テクスチャとメインのゲームプレイを含むゲームのプロトタイプを10日間で作成することができました。 メニュー、GameOver出力、音楽はありませんでした。 しかし、私はすでに自分のゲームが好きでした。 管理しやすいだけでなく、ゲームプレイでは少し筋金入りです。



試行3:

ゲームとコードのすべてが好きだったようですが、その記事の1nt3g3rからのコメントのおかげで、私は多くのことを間違ってand いことにしたことに気付きました。 テクスチャを別のスレッドにロードする初期画面はありませんでした。ひどいゲームアーキテクチャと、さらに多くの小さな問題がありました。 私はこれを買う余裕がなかったので、libGDXに関する西洋の記事に基づいてゲームを書き直さなければなりませんでした。



しかし、開発の終わりには、2つの主な問題がありました。



さまざまな画面解像度のサポート。

マップ上の爆弾の愚かな復活。







マルチスクリーンのサポート



ご存知のように、Androidには、断片化のようなひどいと同時に素晴らしいものがあります。 当初はタブレット専用のゲームを作成しました(Nexus 7 2013)が、遅かれ早かれゲーム内の他の画面のサポートを追加する必要があることはわかっていました。 テクスチャの幅と高さに特定の係数を掛けるだけで、この問題を解決しようと思いましたが、残念ながら、これは役に立たなかった。 小さい解像度のタブレットではうまく表示されましたが、90年代のスクリーンを搭載した古い携帯電話ではあまりよくありませんでした。 そのため、ゲームの仮想世界を2つのメイン画面(またはビューポート)に分割しました。これらはlibGDXでサポートされています。



StretchViewport-プロポーションを保持せずに、実際の画面の幅と長さ全体に拡大する画面。 その上に、ゲームの背景テクスチャを配置しました。 つまり 少なくともiPadでは、少なくともNexusの壁紙では全画面表示されました。



FillViewport-割合に応じて特定のサイズに拡大される画面。 この場合、800/450の仮想スクリーンを作成しました。 アスペクト比は16対9です。その上に、ゲームワールドの残りのオブジェクトをすべて配置しました。 その特殊な特性により、一部のデバイス(iPadなど)で画面を完全に占有するわけではないため、この画面の目に見えない境界線から爆弾が飛ぶような不条理が生じます(図を参照)。 しかし、すべてのデバイスでのゲームプレイは同じであり、爆弾はネクサス7と同じくらいの時間iPhoneで飛ぶ。











リスポンボム



爆弾の出現により、事態はそれほど明確ではありません。 爆弾についてはどうですか? はい、すべてが単純です。最初に影が現れ、成長して暗くなり、同時に空から爆弾が落ち、地球と衝突すると爆発が形成され、影が消えます。 キャラクターを殺すのは爆発です。



何度か、爆弾の出現のためにアルゴリズムを作り直しましたが、完全にはなりませんでした。 それでは、すべてを説明します。

実際にどのように機能するかから始めましょう:

1.仮想画面の幅(800ピクセル)+ 400ピクセルの範囲で、爆弾からの新しい影のランダムなX座標を見つけます。

2.爆弾からの新しい影の座標を確認して、他の影(爆弾の爆発ではなく影)から事前に設定された最小距離になるようにします。

3.すべてが検証に成功した場合、爆弾からの新しい影が表示され、その後爆発します。



コード自体は次のとおりです(申し訳ありませんが、ひどいです)。



private boolean checkCollision(float bombx, float minderuction){ boolean good=true; for(short i=0; i<bombs.size(); i++){ if(!bombs.get(i).getRocket().isHaveDamage()){ float curbombx = bombs.get(i).getShadow().getX(); int curbombwidth = (int)(bombs.get(i).getShadow().getWidth()); if(curbombx>bombx){ if(bombx+curbombwidth+minderuction >= curbombx){ good = false; break; } } else if(curbombx+curbombwidth+minderuction >= bombx){ good = false; break; } } } return good; } public boolean Generate(float minderuction, float minx){ boolean createbomb = false; if(getRandomInt(2)==0) if(bombs.size()<16){ float newbombx = getRandomFloat((float)(screenWidth+400)); if(newbombx > minx && checkCollision(newbombx, minderuction)){ CreateBomb(newbombx); createbomb = true; } } return createbomb; }
      
      







何が悪いの? このアルゴリズムは、管理されていないランダム性に基づいています。 爆弾は競技場を駆け抜けることを妨げないという事実のために、プレーヤーは5分間退屈し、その後、2つの近くの爆弾のために即座に死ぬ可能性があります。 アイデアによると、爆弾間の最小距離を広げることができますが、それほど簡単ではありません。 この距離は、主人公の制動距離の長さとその幅に基づいて計算されました。 そして、その増加のために、ゲームはあまりにも簡単になる可能性があります->面白くない。







ゲームリリース



そのため、ゲームの開発には約2か月かかりました(ほぼ2週間かかりました)。 ここで、ゲームをGoogle Playに掲載します。 ここではすべてが非常に簡単です。私はGoogleの開発者として登録し、コンソールのすべてのフィールドに入力し、スクリーンショットを投稿しました。 新しい年齢制限システムのために、アメリカでの私のゲームの評価が12+に上がったことに驚きましたが、ここでは何もできません。 彼が処理のためにアプリケーションを送信し、App Storeでゲームをリリースした後。



画像



ご存じのとおり、iOS開発にはMacが必要です。 そして、私はそれを持っていませんでした(そして今ではありません)。 だから外に出なければなりませんでした。 Windowsの仮想マシンでOS Xの海賊版を実行できることがわかりました。 これを約1週間行いました。 このOSの正しいバージョンをわずか7回でインストールできました。 そのプログラムはひどく遅くなり、Xcodeだけがダウンロードされて約8時間インストールされました。 しかし、後で、仮想マシンをセットアップして、その中から抑制のない画像を絞り出すことができました(そして、フレームワークが1時間半ほどコンパイルされたゲームでさえも)。



次に、Game CenterとAdMobの広告をiOSプロジェクトに接続する必要がありました。 すでにAndroidアプリケーションの経験があったので、難しくはありませんでした。



デバッグに問題がありました。 iPad(友人が開発のために私に貸してくれた)でゲームをテストするには、開発者のステータスが必要であることが判明しました。 AppleのWebサイトにアクセスし、正しいアプリケーションを残して、カードの詳細を送信しました。約2日後に、会社はそこからお金を受け取りました。 この問題に関して、私は彼らに2日間で約5回手紙を書き、答えを待っていました。 最終的に彼らのサポートをスパムしようとした3日目にだけ、彼らは開発者のアカウントから有効なアクティベーションキーを私に送信しました。 サポート自体は4日目にのみ応答しましたが、これはもはや重要ではありません。 (今、私は彼らをサポートするためにそれほど多くのアピールを書く必要がないと考えています。)



このゲームはiOSに対応していたので、リリースする必要がありました。 Photoshopを使用してApp Storeのデバイスのさまざまな対角線のスクリーンショットを撮りました。ゲームの説明は、友人に英語を翻訳するのに役立ちました。 最後に、ゲームが送信されました。 最初はAppleからのアプリケーションの検証を加速するように頼みましたが、彼らはすでに非常に忙しいと答え、ゲームがモデレートされるまで8日間待たなければなりませんでした。







実際、AndroidとiOS向けの私の最初のゲームが登場しました。 私はこれに非常に満足しており、これら2つの優れたOSの私の開発の歴史を楽しんだことを願っています。 他のことを学ぶのが面白ければ、私はあなたのすべての質問に答えることをうれしく思います。多分私は新しい投稿を書くでしょう。



この記事の執筆を手伝ってくれたTibrに感謝します。



All Articles