31 ポイント 投稿者 GN⁺ 2023-11-26 | 1件のコメント | WhatsAppで共有

コーディングの楽しさを取り戻す: ゲーム開発で燃え尽き症候群を乗り越える

  • 開発者コミュニティでよく見られる不満: コーディングへの情熱が薄れてしまう
  • 燃え尽き症候群を解消するためのヒント: コーディングを再び楽しむために自分だけのゲームを作る
  • ゲーム開発にハマった個人的な経験を共有
  • Go言語とEbitengineライブラリを使ったゲーム開発を推奨

ゲーム開発の基本原理

  • 映画と同様に、ゲームは高速で連続する画像(フレーム)の集合
  • ゲームはリアルタイムで画像を生成し、ユーザー入力に応じて次のフレームが変化する
  • ゲームは基本的に無限ループで、画像の描画とロジックの更新を繰り返す

プロジェクト設定

  • Goモジュールを作成し、Ebitengineライブラリを追加
  • ゲームインターフェースの最小実装で空のウィンドウを実行

アセットの読み込み

  • プログラマーアートを使うか、無料アセットの活用を推奨
  • embed パッケージを使ってアセットをコードに読み込む

画像の描画

  • Draw メソッド内ですべての描画処理を実行
  • ebiten.ImageDrawImage メソッドを使って、別の画像の上に画像を描画
  • DrawImageOptions 構造体を通じて画像の位置、回転、サイズを調整

ゲームロジック

  • Game 構造体はゲーム状態を保持し、Update メソッドで状態を変更
  • 例としてプレイヤーの位置を (X, Y) ベクトルとして保持

移動

  • Update メソッドでプレイヤーの位置を更新して移動を実装
  • キーボード入力に応じてプレイヤーの位置を変更

タイマー

  • ゲーム内で時間に応じたロジック変更のためのタイマーを実装
  • Timer 構造体を使って特定の時間間隔でイベントを発生

ゲームオブジェクト

  • プレイヤーのようなゲームオブジェクトをカプセル化して管理
  • 各オブジェクトは独自の Update および Draw メソッドを持つ

オブジェクト生成

  • メテオオブジェクトを作成し、画面端でスポーン
  • Game 構造体がメテオオブジェクトを追跡

弾の発射

  • 弾の発射ロジックとクールダウンタイマーを実装
  • Player が弾を生成し、Game が追跡

衝突判定

  • 衝突判定のために Rect 構造体と Collider() メソッドを実装
  • ゲームの Update でオブジェクト間の衝突を検査

GN⁺の意見

この記事で最も重要なのは、開発者が燃え尽き症候群を乗り越え、コーディングへの情熱を取り戻す方法を示している点である。ゲーム開発は、創造的で楽しいプロジェクトを通じてコーディングスキルを練習し、同時に新しい言語やライブラリを学べる機会を提供する。この記事は、開発者がコーディングを趣味として再び楽しむためのインスピレーションを与え、Go言語とEbitengineライブラリを使ったゲーム開発の基本的なアプローチを説明することで興味をかき立てる。

1件のコメント

 
GN⁺ 2023-11-26
Hacker Newsの意見
  • 1人目のユーザーは、新しい言語やグラフィックスAPIを学ぶ際、性能テストとして花火や簡単なパーティクルシミュレーションを書くことを好む。2021年にGoとEbitengineを使って試したとき、60fpsで大量のピクセルを動かせる驚くべき性能と使いやすさに深い感銘を受けた。
  • 2人目のユーザーは、昨年Go言語を使ってg3n-engineによるゲーム開発を進めた。Go言語が好きで学びたかったため選び、過去の2Dゲーム開発経験に続いて3D制作をしたくてg3n-engineを選んだ。ゲーム制作は有償の仕事よりはるかに挑戦的でやりがいがあり、学ぶべきことが絶えない。
  • 3人目のユーザーは、Go言語向けのEbiten APIは非常に優れており、APIデザインの面で着想を得られると言及している。また、GoをC++に変換するカスタムコンパイラを使ってゲーム開発で性能を向上させ、C/C++ APIへアクセスし、WebAssemblyでも優れた性能を発揮するという。このコンパイラには、GoコードからGLSLを生成する実験も含まれている。
  • 4人目のユーザーはGo開発者ではないが、Goを使ってゲームを作るあるYouTuber/Twitchストリーマーを長年見てきた。そのストリーマーはGoで小規模なMMOを開発しており、OpenGLとWASMを使ってWeb版も開発している。Goのガベージコレクションは非常に堅牢だと理解しているにもかかわらず、多くの人が「なぜGoで作るのか?」と尋ねるという。
  • 5人目のユーザーは記事の冒頭部分のみに反応し、著者が説明したような燃え尽き症候群を経験しているなら、趣味を「再征服」しようとするよりも関心を発展させることを提案している。これは脳が停滞しているサインかもしれず、必ずしもプログラミングである必要はないが、計算機科学の理論へより深く掘り下げる時期かもしれない。
  • 6人目のユーザーは、数年にわたりEbitengineユーザーとして満足のいく経験をしてきた。Ebitengineで作られたゲームのソースを見たいなら、awesome-ebitengineのリストを確認することを勧めている。そのユーザーのitch.ioプロフィールに掲載されているすべてのゲームはEbitengineで作られており、すべてオープンソースだという。
  • 7人目のユーザーは、Ebitengineを使ってゲームを開発中であり、その体験は新鮮だと感じている。
  • 8人目のユーザーは、Goが大規模なゲームを書くのに適したプラットフォームなのか、C#を使うことを正当化できるほど十分なライブラリと性能があるのかに疑問を呈している。
  • 9人目のユーザーは、Goのゴルーチンという概念のためにゲーム制作に適した言語なのか気になっており、いつか試してみようと考えている。
  • 最後に、Ebitengineベースのゲームへの言及があり、「Spriteコンポーネントの例がどのように見えるか」に関する文が途中で切れているため、修正が必要だと指摘している。