「子供向け」ゲーム開発者または「インディーデベロッパーのプレイ方法」

こんにちは、Habrとその住民。 この投稿では、Real Indie Gameを単独で作成しようとした方法、この恩知らずなビジネスを途中でやめないようにするために何をしなければならなかったか、そして最後に何が起こったのかについてのクールなストーリーを共有します。





まえがき



だから、私は現在17歳であり、私は少年であるという事実から始めましょう。 多くの人は前の文章の後で読みを止め、「私のハブラーのもう一つのシュコロタ、彼はここで何を忘れていたのか!」と言います。



開始しました



それはすべて、アイデアからいつものように始まりました。 2011年9月、突然Javaの知識を少し使って地域コンテスト「Young Programmer」のクラフトを書くといいと思いました。プログラムを書きたくなかったので、ゲームを書くことにしました。 しかし、どれですか? 私は多くのアイデアを持っていましたが、それらはすべて一つのことにかかっていました-私は絶対に描く方法を知りませんでした。 次に、単純なグラフィックスまたは手続き型グラフィックスに基づいてゲームをリコールしようとしました。 同じテトリスのダーウィニア、ダイソン(現在のユーフロリア)を思い出し、最終的に磁気とオタクでクレヨン物理デラックスを書くというアイデアを思いつきました。 いいアイデアだ、言わなければならない。



簡単に言えば、私がこの方法で想像したゲームのゲームプレイ:Kryonのように、プレーヤーはボール、レベル、およびこのボールを引く必要がある特定のエンドポイントを持っています。 唯一の違いは、Kryonでは描画する必要があったことであり、私のゲームでは、プレイヤーのニーズを満たすように世界の物理法則のarbitrary意的な変更を想定していました。 大まかに言えば、彼らはF = maがF = mvになり、変化することを望んでいました。 または、g = mでg = 9.8。 かっこいい! しかし、プレーヤーにとっては難しい。



その結果、概念は、プレイヤーがレベルのオブジェクトに適用できるいくつかの式のセットを持っているという事実に要約されました。 各式は、オブジェクトの物理プロパティの1つに影響します。 たとえば、最初のレベルには、無重力状態、傾斜、および傾斜のふもとにあるボールがあります-最終レベルです。 式「重力」が与えられます。 解決策は初歩的です-フォーミュラをボールにドラッグすると、落下して斜面を転がり落ち、次のレベルに進みます。





開発および最初のバージョン



当然、最も難しいタスクは物理エンジンを書くことでした。 私はすべてを自分で書きたかったのです。準備はしたくありません。 私はJavaをかなり弱いレベルで知っていました。その前に、単純なタワーディフェンス、サッパー、およびいくつかのプログラムのみを記述しましたが、実際には物理学とベクトルをまったく知りませんでした。 それにもかかわらず、私はすべて自分でやろうとしました。 うまくいかなかったとき、記事を探し始めました。 私はたくさんの記事を見つけましたが、それらのすべては率直に言って不完全で、非常に弱く助けました。 その結果、かなり詳細なコード(一部のセクションを除く)、すべてのソース、およびコンパイルされた例があるすばらしい記事を見つけました。 コードがDelphiであったことを除いて、理想的です。 しかし、イルカはHaskellではありません。数時間でコードをJavaに正常に変換しました。



幸いなことに、それはうまくいき、私はゲームプレイに取り組み始めました。 すぐに、悪名高いコンテスト「若いプログラマー」がすぐ近くにあり、10月1日までに仕事を送る必要があることがわかりました。 9月の第2週に開始し、エンジンの記述に2週間かかったことを考えると、ゲームプレイを実装するのにまだ1週間かかりました。 外国のテスターが言うように、私はグラフィックを簡単に作成しました-「古いCADスタイル」。 その結果、1週間で、ゲームプレイの最初のバージョンを作成しました。これにはメニューとヘルプセクションさえありました。 私は1つの営業日を捨てて3つのレベルを作成しました。すべてがきれいなノートブックにあり、エディタはまだ何もしていません。 名前はルームメイト(私はホステルに住んでいます)によって造られましたが、ほとんど意味がありませんが、かなり良い響きのように思えました-Spin Deluxe。 そのため、9月30日23時59分に、ゲームの最初のバージョンをコンテストに送りました。高性能モードのeMachines E642Gでもおもちゃが恥知らずにスローダウンするという事実に注意を払いませんでした。



ここからビルドをダウンロードできます。





失敗後の失敗



私が思い出すように、競争は11月に開催されることになっていた。 この時までに、私は多くのエラーを修正し、インターフェースとメニューを完成させ、バグを修正しました。 私のラップトップでは、ゲームの速度が遅くなりませんでした。 コンテストに新しいバージョンを持ち込んだときの驚きを想像してみてください。ゲームの速度がかなり遅くなることがわかりました。 これはさほど害はありませんでした。私は完璧なプレゼンテーションと一般的なプレゼンテーションがあり、質問もしませんでしたが、効果はまだぼやけていました。 それに、ゲームはまだかなり湿っていたようで、サウンドデザインにはほとんど何もありませんでした。ビジュアルも両脚が足りませんでした。 その結果、彼は2位になりましたが、それは私にとってかなり不快なようでした。最初の場所の仕事は控えめに言っても悲惨で、アマチュアによって書かれていたからです。 ゲームはVisual Basicで記述され、ディスク上のExcelスプレッドシートを使用してゲーム内データを保存したことを思い出すことができます。 その時、私はアマチュアに囲まれていることに気づき、自分の道を進むことにしました。



コンテストのビルドはこちらからダウンロードできます。



それにもかかわらず、私は学校の科学実践会議への参加を申し出られ、同意しました。 その時までに、私は真剣にインターフェイスに取り組み、レベルエディタを作成しさえしましたが、作業はずっと速くなり始めました。 iZuckenが最初の音楽を書き、reAlienがアイコンを描きました。 また、プロファイラーで最適化を開始しました。 私の間違いは、レンダリングのまったく間違った方法を使用していたため、グラフィックスの描画に実行時間の98%がかかっていたことが判明しました。 次の更新されたバージョンのプレゼンテーションは、聴衆を喜ばせ、明確な最初の場所を与えてくれました。



当然、私の技術は科学的な仕事に基づいていなかったので、レポートで「ゲーム開発言語としてのJavaプログラミング言語の学習」という仕事の目的を指摘しました。 彼らが言うように、彼は白い糸で耳の後ろにトピックを引っ張った。 これがおそらく、私が会議の都市段階でまったく何もしなかった理由であり、最初の場所は、さまざまなタイプのインターネット接続の速度を比較した男に与えられました。 そう? タグにbとbrだけが含まれるシンプルなデザインがなくても、PHPでゲストブックを書いた男とは異なり、私はマークされませんでした。 その時までに、1か月で、フォーラム、ギャラリー、ファイルアーカイブを備えた小さなサイトをホストする有料のサイトで落書きをしていました。 これはすべてあなたのベストで泣くことではありませんが、私がモチベーションに深刻なマイナスを再び与えたという事実に、私はほとんどすべてをあきらめました。 初心者開発者向けのサポートは次のとおりです。



ここでサイトを見ることができます。

会議用のビルドをダウンロード- こちら





デスラとオールオールオール



2月、Desuraのインディーズゲーム配信サービスに出会い、モチベーションが再び訪れました。 ゲームページとベイのスクリーンショットを作成したので、私は拒否されました-スクリーンショットはあまりよくなく、トレーラーもありませんでした。 その結果、私はグラフィックスの深刻な改善を始めました。 不器用なものが実際にボールになり、インターフェイスが完全に書き直されて変更され、面倒さが少なくなり、レコードのテーブルや深刻なプロジェクトで利用できる多くのものが追加されました。 ゲームは最終バージョンとそれほど違いはありませんでした。 数晩、特別に書かれた音楽の予告編が作成されました。 その結果、待望の承認と、仕事を続ける大きなインセンティブを受け取りました。



そのため、ゲームコードの準備は95%で、最も難しいのはコンテンツです。 私は頑固にレベルをやりたくありませんでした。 私はそれらをすべて一度に取得したかったので、少なくとも100。 私は1日2〜3レベルしました。 時々彼は何もしなかった。 ファンタジーは頑固に働きたくなかった。 その結果、ある日、私は自分のお尻に座って、ノートブックで20レベルを描きました。 その後、さらに20。レベルの概念の実装と改良に数週間を費やしました。 彼はそれらを章に散らし、イントロとアウトロを書き、視覚効果を追加しました。 製品はほぼ完成した外観を取得しています。 iZuckenは、ゲームにうまく適合するいくつかのトラックを作成しました。



リリースは4月4日に予定されていました。 私の唯一の間違いは価格でした。 私が望んでいた以上にそれを売ることを勧めたのは、一部は私のせいであり、一部は私の父でした。 その結果、最終価格を4.99ドルに設定しました。 高価で無謀。 ちょうど数人を買いました。 価格を75%引き下げました-彼らは少し買い始めました。 しかし、それでも十分ではありませんが、広報の欠如が私に影響を与えました。



彼らが言うように-最初のパンケーキはゴツゴツです。 しかし、一般的に、過去6か月間、私は貴重な経験を積んでおり、間違いから多くを学びました。 gamedevに感謝します!



予告編はこちらでご覧いただけます

デスラのゲームページはこちらです。

スクリーンショット- あちこち



ご清聴ありがとうございました、すぐに会いましょう!



UPD 1:



Helikiは、私が行った最適化について話すように頼みました。 そのため、最も重要な作業はグラフィックスで行われました。 実際には、最初は次のようなことをしました。



public class Graph extends JPanel{ private Timer myTimer; // ,     public class paint(Graphics g){ //  } public void onTimer(ActionEvent ae){ repaint(); } }
      
      







しかし、この方法は非常に遅く、理由はわかりません。 より適切なメソッドは、Canvasクラスをレンダリング用のコンポーネントとして使用し、BufferStrategyクラスをバッファリング用に使用しました。 この低レベルのメソッドにより、レンダリング時間を短縮できました。



また、Vecクラス(単純な2次元ベクトル)に対していくつかの深刻な最適化を行いました。 物理エンジンのコードの大部分を記事からコピーしたため、Vecクラスの各メソッドは、add、sub、mul、div、normalizeなどです。 新しいVecが返され、このクラスの何百万ものオブジェクトが作成されました。 はい、可能性のある連鎖、つまり のような構造



 Vec toMove = pos2.sub(pos1).normalize().mul(speed);
      
      







その結果、作成の後半の段階で、同時に作成されたベクターの数を150万から3万(およそ)に減らし、既に作成されたオブジェクトを再利用しました。 これは制限ではありませんが、人間の目にはあまり目立ちませんが、結果は非常に印象的でした。



All Articles