OpenGLで作るiPhone SDKゲームプログラミング

OpenGLで作るiPhone SDKゲームプログラミング

¥2,800+税

品種名
書籍
発売日
2009/12/18
ページ数
352P
サイズ
B5変型判
著者
横江宗太(株式会社パンカク) 著
ISBN
978-4-8443-2808-7

OpenGLを使ったiPhone用2D/3Dゲームプログラミングがじっくり学べる!

米Apple Storeで1位を獲得した開発チームのノウハウが満載!ライブラリの自作から実際のゲーム制作までのプロセス、「あたり判定」や「制限時間」の具体的な実装方法、3D表示の基礎だけでなく高速化のテクニックなどを徹底解説。OpenGLを使ったiPhone用2D/3Dゲームプログラミングがじっくり学べる。本書で使用したサンプルコードはWebサイトからダウンロードできる。 ■本書の紹介ムービーを公開中!※音が出ます
★筆者による本書のサポートブログ
http://iphone.pankaku.com/book/
本書を補足する内容や、最新のOS/SDKに対する対応情報などを適宜更新しています。

「読者アンケートに答える」「読者プレゼントに応募」の場合もこちらをご利用ください。

アンケートに答える

書籍の内容に関するお問い合わせはこちら。お答えできるのは本書に記載の内容に関することに限ります。

学校・法人一括購入に関するお問い合わせはこちらへ。

一括購入窓口

目次

序章 iPhoneゲームプログラミングに向けて
iPhoneゲームプログラミングの面白さ/CoreGraphicsとOpenGL/iPhoneにおけるOpenGLプログラミング/本書の使い方/本書を読む上で必要となる知識/本書で扱う内容/本書で扱わない内容/その他の注意事項

第1章 OpenGL(2D)
iPhoneにおけるOpenGL/OpenGL ES Applicationの全体像/render関数の流れ/レンダラーの設定/ビルドして実行/座標系/座標系の変更/ビルドして実行/ポリゴンの描画/ポリゴンの描画の流れ/ライブラリの作成/下準備:Objective-C++の有効化/モジュール、ヘッダファイルの追加/正方形のポリゴン描画関数の作成/OpenGLの設定部分と描画部分の分離/色付きの正方形の描画関数の作成 etc.

第2章 ハエたたき
プロジェクトの設計/プロジェクトの作成/新しいOpenGL ES Applicationの作成/座標系の設定/グラフィック用ライブラリの追加/背景画像の表示/テクスチャの読み込み/テクスチャの描画/標的の表示/テクスチャの読み込み、描画/標的の回転/標的の移動/標的の拡大縮小/標的を動かしてみる/直線移動/ワープ処理/旋回処理/方向転換処理/当たり判定/レンダラーとビュー etc.

第3章 パーティクルシステム
パーティクルシステムとは/パーティクルシステムのメリットとデメリット/パーティクルシステムの原理/パーティクルシステムの実装/新しいOpenGL ES Applicationの作成/パーティクルの大量表示/パーティクルのライフサイクル/パーティクルの動的追加/リファクタリング/パーティクルを動かす/パーティクルの破棄/時間に応じた変化/パーティクルシステムの高速化 etc.

第4章 レースゲーム(2D)
プロジェクトの設計/プロジェクトの作成/OpenGL ES Applicationの作成/ランドスケープモード/ゲームクラスの導入/ゲームクラスを導入する理由/MyGameクラスの作成/MyGameクラスとビュー、レンダラーの連携/レンダラーとゲーム情報の分離/インターフェースの作成/ボタンの作成/アクセルのオンとオフ/ゲームの進行部分の作成/ゲーム進行用メソッド/車の移動/車の左右旋回 etc.

第5章 衝突判定と衝突応答
衝突判定と衝突応答とは/衝突判定と衝突応答の実装/新しいOpenGL ES Applicationの作成/ゲームクラスの作成/ボールの描画と移動/慣性力のコントロール/ベクトルの導入/ベクトルとは/ベクトルの実装/graphicUtilのVector2D対応/Vector2Dへの置き換え/ベクトルの計算/ベクトルの加算/ベクトルの減算/ベクトルの乗除/ベクトルの長さの計算/単位ベクトル/内積を求める関数 etc.

第6章 レースゲーム(3D)
3Dの基礎/座標系/OpenGLにおける2Dと3D/射影/深度テストと深度バッファ/見た目の3D化/視野の設定/3D部分と2D部分/3Dのポリゴン/3D座標の表現/コースの壁/タイヤバリアの描画/高速化/頂点バッファオブジェクト(VBO)/頂点バッファオブジェクトの使い方/頂点バッファオブジェクトの使用/車の描画/タイヤの描画/ボディの描画/仕上げ

ダウンロード

  • 本書で解説しているゲームの完成版ソースコードと、それぞれのゲームで利用する画像ファイルやサウンドファイルは、下記のリンクをクリックしてダウンロードしてください。

     

    なお、ダウンロードしたファイルはzip形式で圧縮されています。展開してからご利用ください。

     

    http://www.impressjapan.jp/support/aftercare/download/2808.zip

お詫びと訂正

誤記のためにご迷惑をおかけし、誠に申し訳ございません。

  • 49ページ 本文5行目
    • [誤]角度 = (360÷n) × ix = cos(角度) × 半径, y = sin(角度) × 半径
    • [正]角度 = (360÷n) × i, x = cos(角度) × 半径, y = sin(角度) × 半径
    • 備考:

      iとxの間にカンマが抜けていました。

  • 153ページ 本文1行目
    • [誤]setViewメソッドの中身を実装します。
    • [正]この文は不要です。
    • 【 第2刷にて修正 】
  • 153ページ ES1Renderer.mmの3行目
    • [誤]...略...

      @implementation ES1Renderer

      @synthesize

      ...略...

      }

      @end
    • [正]...略...

      @implementation ES1Renderer

      @synthesize glView;

      ...略...

      }

      @end
    • 備考:

       ソースコードの一部が誤っていました。

    • 【 第2刷にて修正 】
  • 153ページ 本文2行目
    • [誤]最後に、EAGLViewの~setViewメソッドを呼び出し、
    • [正]最後に、EAGLViewのinitWithCoder内のES1Rendererを生成している個所でglViewに自身をセットし、
    • 【 第2刷にて修正 】
  • 161ページ 本文10行目
    • [誤]標準を叩いたときに鳴らす〜をEAGLViewに追加します。
    • [正]標準を叩いたときに鳴らす〜をES1Rendererに追加します。
    • 備考:

       本文に誤りがありました。

  • 162ページ 掲載コードの15行目
    • [誤]hitSoundFileUrlerror:nil];
    • [正]hitSoundFileUrl error:nil];
    • 備考:

       hitSountFileUrlの後の半角スペースが抜けていました。

  • 164ページ 掲載コードの青字部分の4行目~6行目
    • [誤]...略...

      bgm = [[AVAudioPlayer alloc] initWithContentsOfURL:bgmFileUrl

      error:nil];

      bgm[setNumberOfLoops:-1];

      bgm[play];

      ...略...

    • [正]...略...

      bgmSound = [[AVAudioPlayer alloc] initWithContentsOfURL:bgmFileUrl

      error:nil];

      [bgmSound setNumberOfLoops:-1];

      [bgmSound play];

      ...略...

    • 備考:

       ソースコード上の表記が一部間違っていました。

    • 【 第3刷にて修正 】
  • 186ページ フェードインの掲載コードの11行目
    • [誤]...略...

      //フェードアウトします

      alpha = 255 - (int)round(lifePercentage * 2.0f * 255.0f);

      ...略...
    • [正]...略...

      //フェードアウトします

      alpha = 255 - (int)round((lifePercentage - 0.5f) * 2.0f * 255.0f);

      ...略...
    • 備考:

       ソースコード上の表記が一部間違っていました。

    • 【 第2刷にて修正 】
  • 188ページ 掲載コードの11行目
    • [誤]//1つのパーティクルあたり6頂点×2要素(x,y)×最大のパーティクル数
    • [正]//1つのパーティクルあたり6頂点×2要素(u,v)×最大のパーティクル数
    • 備考:

      ソースコード上の表記が一部間違っていました。

  • 202ページ ランドスケープモード設定に関する掲載コード(12行目)
    • [誤]...略...

      glView.transform = CGAffineTransformConcat(glView.transform, CGAffineTransformMakeRotation(M_PI * 90.0f / 180.0f);

      ...略...
    • [正]...略...

      glView.transform = CGAffineTransformConcat(glView.transform, CGAffineTransformMakeRotation(M_PI * 90.0f / 180.0f));

      ...略...
    • 備考:

       最後のとじ括弧「)」が抜けていました。

  • 247ページ ES1Renderer.mmの8行目
    • [誤]int currentLapTimeMilliSeconds =

      (int)floor((currentGame.currentLapTime * 1000.0f) % 1000;
    • [正]int currentLapTimeMilliSeconds =

      (int)floor(currentGame.currentLapTime * 1000.0f) % 1000;
    • 備考:

      不要な括弧が含まれていました。

    • 【 第3刷にて修正 】
  • 249ページ ES1Renderer.mmの7行目
    • [誤]int currentLapTimeMilliSeconds =

      (int)floor((currentGame.fastestLapTime * 1000.0f) % 1000;
    • [正]int currentLapTimeMilliSeconds =

      (int)floor(currentGame.fastestLapTime * 1000.0f) % 1000;
    • 備考:

      不要な括弧が含まれていました。

    • 【 第3刷にて修正 】
  • 265ページ graphicUtil.hの2行目
    • [誤]#import "ector2D.h"
    • [正]#import "Vector2D.h"
    • 備考:

       ソースコード上の表記が一部間違っていました。

    • 【 第3刷にて修正 】
  • 290ページ 5-7-2 外枠との衝突のソースコードの3行目
    • [誤]- (void)update{

      // ラップタイムを計測します

      currentLapTime = (int)floor(-[currentLapStartTime timeIntervalSinceNow]); ←この部分を修正
    • [正]この部分の修正は必要ありません。
    • 【 第3刷にて修正 】
  • 294ページ ES1Renderer.mmの15行目
    • [誤]drawCircle(currentGame.tyreBarrier[i]->center,

      currentGame.tyreBarrier[i]->radius, 8, 255, 255, 255, 255);
    • [正]drawCircle(currentGame.tyreBarrier[i]->center,

      8, currentGame.tyreBarrier[i]->radius, 255, 255, 255, 255);
    • 備考:

      タイヤバリアの描画部分において、引数の順番が間違っていました。

    • 【 第3刷にて修正 】
  • 325ページ ES1Renderer.mmの14行目
    • [誤]drawTyreBarrier(currentGame.tyreBarriers[i]->radius, 0.03f,

      tyreTexture, tyreSideTexture);
    • [正]drawTyreBarrier(currentGame.tyreBarriers[i]->radius, 0.03f, tyreTexture);
    • 備考:

       関数の引数が多い個所がありました。

    • 【 第3刷にて修正 】

お問い合わせ

書籍の内容に関するお問い合わせはこちら。お答えできるのは本書に記載の内容に関することに限ります。

お問い合わせフォーム