- トップページ
- OpenGLで作るAndroid SDKゲームプログラミング
OpenGLで作るAndroid SDKゲームプログラミング

3,080円(本体 2,800円+税10%)
- 品種名
- 書籍
- 発売日
- 2011/4/7
- ページ数
- 368P
- サイズ
- B5変型判
- 著者
- 中島安彦、横江宗太、株式会社パンカク 著
- ISBN
- 9784844330080
OpenGLを使ったAndroid SDK用2D/3Dゲームプログラミングがじっくり学べる!
世界で240万人以上のユーザーを獲得した開発チームのノウハウが満載!ライブラリの自作から実際のゲーム制作までのプロセス、「当たり判定」や「制限時間」の具体的な実装方法、ソーシャルゲームSDKを利用したソーシャル化の方法まで丁寧に解説しています。本書で使用したサンプルコードはWebサイトからダウンロードできます。
「読者アンケートに答える」「読者プレゼントに応募」の場合もこちらをご利用ください。
書籍の内容に関するお問い合わせはこちら。お答えできるのは本書に記載の内容に関することに限ります。
学校・法人一括購入に関するお問い合わせはこちらへ。
詳細
■本書紹介ムービー
■ページイメージ
■ページイメージ
![]() |
![]() |
![]() |
![]() |
目次
はじめに
目次
序章 Androidゲームプログラミングに向けて
0-1 Androidでのゲームプログラミングについて
0-1-1 CanvasとOpenGL
0-1-2 AndroidにおけるOpenGLプログラミング
0-2 本書の使い方
0-2-1 本書を読む上で必要となる知識
0-2-2 本書で扱う内容
0-2-3 本書で扱わない内容
0-2-4 その他注意事項
第1章 OpenGL(2D)
1-1 AndroidにおけるOpenGL
1-1-1 OpenGLを使うための準備
1-1-2 サンプルプログラムの作成
1-1-3 ビルドして実行
1-2 座標系
1-2-1 座標系の変更
1-2-2 ビルドして実行
1-3 ポリゴンの描画
1-3-1 ポリゴン描画の流れ
1-4 ライブラリの作成
1-4-1 正方形ポリゴン描画メソッドの作成
1-4-2 OpenGLの設定部分と描画部分の分離
1-4-3 色付きの正方形の描画メソッドの作成
1-4-4 指定した座標へ正方形を描画する関数の作成
1-4-5 長方形を描画する関数の作成
1-4-6 円を描画するメソッドの作成
1-5 アルファブレンディング
1-5-1 アルファブレンディングの使い方
1-5-2 さまざまなアルファブレンディング
1-6 テクスチャ
1-6-1 テクスチャ描画の流れ
1-6-2 テクスチャを使用するための下準備
1-6-3 テクスチャの生成
1-6-4 テクスチャの描画
1-6-5 テクスチャマッピング
1-6-6 テクスチャ描画メソッドの作成
1-7 数字の描画メソッドの作成
1-7-1 1桁の数字を描画する
1-7-2 複数桁の数字を描画する
1-7-3 メソッドの設定
1-8 マトリクス変換
1-8-1 マトリクス変換とは
1-8-2 マトリクス変換のコード
1-8-3 マトリクス変換の使い方
1-8-4 平行移動(glTranslatef)
1-8-5 回転(glRotatef)
1-8-6 拡大縮小(glScalef)
1-8-7 マトリクス変換の適用される範囲
1-8-8 組み合わせて使う場合の注意
第2章 ハエたたき
2-1 プロジェクトの設計
2-2 プロジェクトの作成
2-2-1 画面を縦固定にする
2-2-2 OpenGLを使う準備をする
2-3 背景画像の表示
2-3-1 テクスチャの読み込み
2-3-2 テクスチャの描画
2-4 標的の表示
2-4-1 テクスチャの読み込みと描画
2-4-2 標的の回転
2-4-3 標的の移動
2-4-4 標的の拡大縮小
2-5 標的を動かしてみる
2-5-1 直線移動
2-5-2 ワープ処理
2-5-3 旋回処理
2-5-4 方向転換処理
2-5-5 ランダムなタイミングで方向転換させる
2-6 当たり判定
2-6-1 RendererとGLSurfaceView
2-6-2 タッチイベントの取得
2-6-3 ビューとレンダラーの連携
2-6-4 タッチされたポイントと標的の座標との当たり判定の計算
2-6-5 タッチされた後の処理
2-7 標的の追加
2-7-1 標的クラスの作成
2-7-2 MyTargetクラスへの置き換え
2-7-3 リファクタリング
2-7-4 標的を増やす
2-8 点数の付け方
2-8-1 点数のカウント
2-8-2 得点の描画
2-9 制限時間の設定
2-9-1 経過時間の計測
2-9-2 残り時間の表示
2-9-3 ゲームオーバー後の処理
2-9-4 リファクタリング
2-9-5 リトライボタンの追加
2-10 サウンド
2-10-1 効果音の再生
2-10-2 BGMの再生
2-11 Androidのライフサイクル
2-11-1 Activityのライフサイクルを理解する
2-11-2 バックグラウンドからの復帰時にゲームを再開できるようにする
2-11-3 ハードウェアボタンの制御
第3章 パーティクルシステム
3-1 パーティクルシステムとは
3-1-1 パーティクルシステムのメリットとデメリット
3-1-2 パーティクルシステムの原理
3-2 パーティクルシステムの実装
3-2-1 プロジェクトの作成
3-2-2 パーティクルの大量表示
3-2-3 パーティクルのライフサイクル
3-2-4 パーティクルの動的追加
3-2-5 リファクタリング
3-2-6 パーティクルを動かす
3-2-7 パーティクルの破棄
3-2-8 時間に応じた変化
3-3 パーティクルシステムの改良
3-3-1 描画の高速化
3-3-2 パーティクルの最大数の指定
3-3-3 パーティクルシステムのバリエーション
3-4 ハエたたきゲームへの応用
3-4-1 パーティクルシステムの追加
3-4-2 標的の動きの追跡
3-4-3 攻撃時のエフェクト
3-4-4 見た目の仕上げ
第4章 性能改善
4-1 Androidはなぜ遅いのか
4-2 FPSを表示させよう
4-2-1 FPS(Frame Per Second)
4-2-2 FPSを表示する
4-2-3 デバッグモード時のみFPSを描画する
4-3 最適化の方針
4-4 GraphicUtilとParticleSystemの改良
4-4-1 頂点配列の再利用
4-4-2 ハッシュテーブルの活用
4-4-3 バッファの再利用
4-4-4 パーティクルシステムの改良
4-5 その他の性能改善方法
4-5-1 よく使うテクニック
4-5-2 あまり使わない性能改善方法
第5章 レースゲーム(2D)
5-1 プロジェクトの設計
5-2 プロジェクトの作成
5-2-1 ランドスケープモード
5-3 ゲームスレッドの導入
5-3-1 ゲームスレッドを導入する理由
5-3-2 MyGameThreadクラスの作成
5-3-3 MyGameThreadクラスとビュー、レンダラーの連携
5-3-4 レンダラーとゲーム情報の分離
5-4 インターフェースの作成
5-4-1 ボタンの作成
5-5 ゲーム進行部分の作成
5-5-1 ゲーム進行用メソッド
5-5-2 車の移動
5-5-3 車の左右旋回
5-6 リファクタリング
5-6-1 車を扱うMyCarクラスの導入
5-7 コースの実装
5-7-1 コース画像の表示
5-7-2 車のサイズとスピードの調整
5-7-3 チェックポイント
5-8 周回とラップタイム
5-8-1 周回を管理する
5-8-2 ラップタイムの計測
5-9 マルチタッチへの対応
5-9-1 Androidにおけるユーザーインターフェースの問題点
5-9-2 MyGLSurfaceViewクラスの修正
第6章 衝突判定と衝突応答
6-1 衝突判定と衝突応答とは
6-2 ベクトルの導入
6-2-1 Javaにおけるベクトルの表現
6-2-2 ベクトルの加減乗除
6-2-3 長さの計算と単位ベクトル
6-2-4 内積
6-3 実験用プログラムの作成
6-3-1 プロジェクトの作成
6-3-2 MyGameThreadの作成
6-3-3 ボールの描画と移動
6-4 外枠との衝突
6-4-1 枠の上の部分との衝突
6-5 円同士の衝突
6-5-1 円同士の衝突判定
6-5-2 円同士の衝突応答
6-6 レースゲームへの応用(Vector2Dクラス、Circleクラスの導入)
6-6-1 MyCarクラスの変更
6-6-2 外枠との衝突
6-6-3 円形障害物の追加
6-6-4 グリップ感の演出
6-7 グラフィックスの改善
6-7-1 自車の中央表示
第7章 レースゲーム(3D)
7-1 3Dの基礎
7-1-1 座標系
7-1-2 OpenGLにおける2Dと3D
7-1-3 射影
7-2 見た目の3D化
7-2-1 視野の設定
7-2-2 3D部分と2D部分
7-3 3Dのポリゴン
7-3-1 3D座標の表現
7-3-2 コースの壁
7-3-3 深度テストと深度バッファ
7-3-5 タイヤバリアの描画
7-4 頂点バッファオブジェクト(VBO)
7-4-1 頂点バッファオブジェクトの使い方
7-4-2 MyVboクラス
7-4-3 頂点バッファオブジェクトの使用
7-5 車の描画
7-5-1 タイヤの描画
7-5-2 ボディの描画
7-6 仕上げ
第8章 ソーシャルゲーム
8-1 ソーシャルゲーム
8-1-1 ソーシャルゲームの登場
8-1-2 ソーシャルゲームとゲームのソーシャル化
8-1-3 ゲームをソーシャルにするメリット
8-1-4 ゲームをソーシャルにする基本的要素
8-1-5 ゲーム用ソーシャルプラットフォームとSDK
8-2 ゲームのソーシャル化
8-2-1 Pankia
8-2-2 デベロッパー登録とPankiaの入手
8-2-3 アプリケーションの登録
8-2-4 ハエたたきゲームへの組み込み
8-3 リーダーボード
8-3-1 リーダーボードとは
8-3-2 リーダーボードの作成
8-3-3 リーダーボードの組み込み
8-4 アチーブメント
8-4-1 アチーブメントとは
8-4-2 アチーブメントの作成
8-4-3 アチーブメントの組み込み
8-5 最後に
付録 本書で利用するクラス
MyVboクラス
GraphicUtilクラス
パーティクルシステム
INDEX
■著者プロフィール
目次
序章 Androidゲームプログラミングに向けて
0-1 Androidでのゲームプログラミングについて
0-1-1 CanvasとOpenGL
0-1-2 AndroidにおけるOpenGLプログラミング
0-2 本書の使い方
0-2-1 本書を読む上で必要となる知識
0-2-2 本書で扱う内容
0-2-3 本書で扱わない内容
0-2-4 その他注意事項
第1章 OpenGL(2D)
1-1 AndroidにおけるOpenGL
1-1-1 OpenGLを使うための準備
1-1-2 サンプルプログラムの作成
1-1-3 ビルドして実行
1-2 座標系
1-2-1 座標系の変更
1-2-2 ビルドして実行
1-3 ポリゴンの描画
1-3-1 ポリゴン描画の流れ
1-4 ライブラリの作成
1-4-1 正方形ポリゴン描画メソッドの作成
1-4-2 OpenGLの設定部分と描画部分の分離
1-4-3 色付きの正方形の描画メソッドの作成
1-4-4 指定した座標へ正方形を描画する関数の作成
1-4-5 長方形を描画する関数の作成
1-4-6 円を描画するメソッドの作成
1-5 アルファブレンディング
1-5-1 アルファブレンディングの使い方
1-5-2 さまざまなアルファブレンディング
1-6 テクスチャ
1-6-1 テクスチャ描画の流れ
1-6-2 テクスチャを使用するための下準備
1-6-3 テクスチャの生成
1-6-4 テクスチャの描画
1-6-5 テクスチャマッピング
1-6-6 テクスチャ描画メソッドの作成
1-7 数字の描画メソッドの作成
1-7-1 1桁の数字を描画する
1-7-2 複数桁の数字を描画する
1-7-3 メソッドの設定
1-8 マトリクス変換
1-8-1 マトリクス変換とは
1-8-2 マトリクス変換のコード
1-8-3 マトリクス変換の使い方
1-8-4 平行移動(glTranslatef)
1-8-5 回転(glRotatef)
1-8-6 拡大縮小(glScalef)
1-8-7 マトリクス変換の適用される範囲
1-8-8 組み合わせて使う場合の注意
第2章 ハエたたき
2-1 プロジェクトの設計
2-2 プロジェクトの作成
2-2-1 画面を縦固定にする
2-2-2 OpenGLを使う準備をする
2-3 背景画像の表示
2-3-1 テクスチャの読み込み
2-3-2 テクスチャの描画
2-4 標的の表示
2-4-1 テクスチャの読み込みと描画
2-4-2 標的の回転
2-4-3 標的の移動
2-4-4 標的の拡大縮小
2-5 標的を動かしてみる
2-5-1 直線移動
2-5-2 ワープ処理
2-5-3 旋回処理
2-5-4 方向転換処理
2-5-5 ランダムなタイミングで方向転換させる
2-6 当たり判定
2-6-1 RendererとGLSurfaceView
2-6-2 タッチイベントの取得
2-6-3 ビューとレンダラーの連携
2-6-4 タッチされたポイントと標的の座標との当たり判定の計算
2-6-5 タッチされた後の処理
2-7 標的の追加
2-7-1 標的クラスの作成
2-7-2 MyTargetクラスへの置き換え
2-7-3 リファクタリング
2-7-4 標的を増やす
2-8 点数の付け方
2-8-1 点数のカウント
2-8-2 得点の描画
2-9 制限時間の設定
2-9-1 経過時間の計測
2-9-2 残り時間の表示
2-9-3 ゲームオーバー後の処理
2-9-4 リファクタリング
2-9-5 リトライボタンの追加
2-10 サウンド
2-10-1 効果音の再生
2-10-2 BGMの再生
2-11 Androidのライフサイクル
2-11-1 Activityのライフサイクルを理解する
2-11-2 バックグラウンドからの復帰時にゲームを再開できるようにする
2-11-3 ハードウェアボタンの制御
第3章 パーティクルシステム
3-1 パーティクルシステムとは
3-1-1 パーティクルシステムのメリットとデメリット
3-1-2 パーティクルシステムの原理
3-2 パーティクルシステムの実装
3-2-1 プロジェクトの作成
3-2-2 パーティクルの大量表示
3-2-3 パーティクルのライフサイクル
3-2-4 パーティクルの動的追加
3-2-5 リファクタリング
3-2-6 パーティクルを動かす
3-2-7 パーティクルの破棄
3-2-8 時間に応じた変化
3-3 パーティクルシステムの改良
3-3-1 描画の高速化
3-3-2 パーティクルの最大数の指定
3-3-3 パーティクルシステムのバリエーション
3-4 ハエたたきゲームへの応用
3-4-1 パーティクルシステムの追加
3-4-2 標的の動きの追跡
3-4-3 攻撃時のエフェクト
3-4-4 見た目の仕上げ
第4章 性能改善
4-1 Androidはなぜ遅いのか
4-2 FPSを表示させよう
4-2-1 FPS(Frame Per Second)
4-2-2 FPSを表示する
4-2-3 デバッグモード時のみFPSを描画する
4-3 最適化の方針
4-4 GraphicUtilとParticleSystemの改良
4-4-1 頂点配列の再利用
4-4-2 ハッシュテーブルの活用
4-4-3 バッファの再利用
4-4-4 パーティクルシステムの改良
4-5 その他の性能改善方法
4-5-1 よく使うテクニック
4-5-2 あまり使わない性能改善方法
第5章 レースゲーム(2D)
5-1 プロジェクトの設計
5-2 プロジェクトの作成
5-2-1 ランドスケープモード
5-3 ゲームスレッドの導入
5-3-1 ゲームスレッドを導入する理由
5-3-2 MyGameThreadクラスの作成
5-3-3 MyGameThreadクラスとビュー、レンダラーの連携
5-3-4 レンダラーとゲーム情報の分離
5-4 インターフェースの作成
5-4-1 ボタンの作成
5-5 ゲーム進行部分の作成
5-5-1 ゲーム進行用メソッド
5-5-2 車の移動
5-5-3 車の左右旋回
5-6 リファクタリング
5-6-1 車を扱うMyCarクラスの導入
5-7 コースの実装
5-7-1 コース画像の表示
5-7-2 車のサイズとスピードの調整
5-7-3 チェックポイント
5-8 周回とラップタイム
5-8-1 周回を管理する
5-8-2 ラップタイムの計測
5-9 マルチタッチへの対応
5-9-1 Androidにおけるユーザーインターフェースの問題点
5-9-2 MyGLSurfaceViewクラスの修正
第6章 衝突判定と衝突応答
6-1 衝突判定と衝突応答とは
6-2 ベクトルの導入
6-2-1 Javaにおけるベクトルの表現
6-2-2 ベクトルの加減乗除
6-2-3 長さの計算と単位ベクトル
6-2-4 内積
6-3 実験用プログラムの作成
6-3-1 プロジェクトの作成
6-3-2 MyGameThreadの作成
6-3-3 ボールの描画と移動
6-4 外枠との衝突
6-4-1 枠の上の部分との衝突
6-5 円同士の衝突
6-5-1 円同士の衝突判定
6-5-2 円同士の衝突応答
6-6 レースゲームへの応用(Vector2Dクラス、Circleクラスの導入)
6-6-1 MyCarクラスの変更
6-6-2 外枠との衝突
6-6-3 円形障害物の追加
6-6-4 グリップ感の演出
6-7 グラフィックスの改善
6-7-1 自車の中央表示
第7章 レースゲーム(3D)
7-1 3Dの基礎
7-1-1 座標系
7-1-2 OpenGLにおける2Dと3D
7-1-3 射影
7-2 見た目の3D化
7-2-1 視野の設定
7-2-2 3D部分と2D部分
7-3 3Dのポリゴン
7-3-1 3D座標の表現
7-3-2 コースの壁
7-3-3 深度テストと深度バッファ
7-3-5 タイヤバリアの描画
7-4 頂点バッファオブジェクト(VBO)
7-4-1 頂点バッファオブジェクトの使い方
7-4-2 MyVboクラス
7-4-3 頂点バッファオブジェクトの使用
7-5 車の描画
7-5-1 タイヤの描画
7-5-2 ボディの描画
7-6 仕上げ
第8章 ソーシャルゲーム
8-1 ソーシャルゲーム
8-1-1 ソーシャルゲームの登場
8-1-2 ソーシャルゲームとゲームのソーシャル化
8-1-3 ゲームをソーシャルにするメリット
8-1-4 ゲームをソーシャルにする基本的要素
8-1-5 ゲーム用ソーシャルプラットフォームとSDK
8-2 ゲームのソーシャル化
8-2-1 Pankia
8-2-2 デベロッパー登録とPankiaの入手
8-2-3 アプリケーションの登録
8-2-4 ハエたたきゲームへの組み込み
8-3 リーダーボード
8-3-1 リーダーボードとは
8-3-2 リーダーボードの作成
8-3-3 リーダーボードの組み込み
8-4 アチーブメント
8-4-1 アチーブメントとは
8-4-2 アチーブメントの作成
8-4-3 アチーブメントの組み込み
8-5 最後に
付録 本書で利用するクラス
MyVboクラス
GraphicUtilクラス
パーティクルシステム
INDEX
■著者プロフィール
| 中島 安彦(なかしま やすひこ) 1985年生まれ。2007年よりjavaプログラマとしてエンタープライズ向け開発に従事し、2009年より株式会社パンカクに勤務。Android向けゲーム開発と、Pankiaの開発を担当する。休日の過ごし方は、呑んで寝る。 |
| 横江 宗太(よこえ そうた) http://nantekottai.com/ 1986年生まれ。株式会社パンカク執行役員、慶應義塾大学大学院政策・メディア研究科修士課程修了。アプリ開発以外に、インスタレーション作品の制作/展示なども行っている。好物はコロッケとメンチカツ。著書に「OpenGLで作るiPhone SDKゲームプログラミング」(インプレスジャパン刊)がある。 |
| 株式会社パンカク http://www.pankaku.co.jp/ 2009年2月 iPhone用3Dゲーム「LightBike」が 米国AppStore有料ランキングで1位を獲得。 2009年10月 シリコンバレーで行われた世界的なビジネスコンテストPACTで、世界で最も革新的なベンチャーの1社に選ばれる。 2010年5月 ソーシャルSDK「Pankia」サービス開始。 2011年2月 「Pankia」の利用者数が500万人を突破。 2011年4月 「Pankia」の一般デベロッパへの公開開始予定。 |
関連書籍
ダウンロード
-
本書で解説しているゲームの完成版ソースコードと、それぞれのゲームで利用する画像ファイルやサウンドファイルは、下記のリンクをクリックしてダウンロードしてください。
なお、ダウンロードしたファイルはzip形式で圧縮されています。展開してからご利用ください。※一部間違ったマニフェストファイルが同梱されておりました。また、「Appendix」フォルダがありませんでした。お詫びして訂正いたします。(2011.07.08更新)
お詫びと訂正
誤記のためにご迷惑をおかけし、誠に申し訳ございません。
- 2ページ サポートサイト
- [誤]
筆者によるサポートブログが公開されました。 - [正]
-
備考:
サポートブログでは、本書内で掲載しきれなかった補足事項や、最新のOS/SDKに対する対応情報などを更新していく予定です。
◆サポートブログ
http://android.pankaku.com/book/
- [誤]
- 77ページ ソースコードの2行目
- [誤]
float widht, - [正]
float width, -
備考:
ソースコードの一部が誤っていました。
- [誤]
- 83ページ 小見出し
- [誤]
実勢にポリゴンを拡大させよう - [正]
実際にポリゴンを拡大させよう -
備考:
文章に誤りがありました。
- [誤]
- 303ページ Hint MyVboクラスについて
- [誤]
MyVboクラスについての補足説明。 - [正]
-
備考:
MyVboクラスに関する説明
ここでは本書内でスペースの関係で説明しきれなかったMyVboクラスについて説明しています。本書350ページから掲載されているソースコードと合わせながら読み進めてください。MyVboクラスの全体像MyVboクラスは、頂点バッファオブジェクト(VBO)を扱うためのクラスです。大きく分けて、下記の用な機能を持っています。1.VBOを使う準備をする機能2.VBOを使って画面に描画を行う機能3.必要なくなったときにメモリーを解放する機能ここでは、これらの各機能がどのように実装されているかを説明します。なお、実際のソースコードについては本書350ページを参照してください。1. VBOの準備MyVboクラスを使うと、VBOを扱うための準備を簡単に行うことができます。VBOを使うためには、そのVBOを識別するためのIDのほかに、実際に描画に使用する頂点座標や色情報、テクスチャマッピングなどの情報を管理するためのメモリーを確保しなければいけません(MyVboクラスでは、コードの読みやすさを優先するため、各頂点の色に関する情報は保持していません)。これらの情報はビデオカード上に保存されますが、ビデオメモリーを直接操作するのは効率がよくないため、通常はシステムメモリー上にこれらの情報を用意してから、それをビデオメモリーにコピーする、という方法をとります。MyVboクラスでは、mVertices, mTexCoords, mVerticesBuffer, mTexCoordsBufferがシステムメモリー上のデータにあたります。allocメソッド内でこれらのデータ用のメモリーを確保し、プログラム側で実際に頂点データなどを指定したあと、bufferDataメソッドを使ってデータをビデオカード上に転送しています。VBOで使用するデータ(頂点座標、色情報、テクスチャマッピングなど)は、ビデオメモリー上ではつながった一つの配列として管理されます。描画の際には、この一つの配列から頂点座標やテクスチャマッピングの情報を取り出すことになるため、配列のどこからどこまでなんの情報が入っているのかを保持しておく必要があり、MyVboクラスではmVCount, mTCount, mPCountという変数を使って、これらを管理しています。2. VBOを使った描画そのようにして作成したVBOを使って実際に画面に描画を行うのがdrawメソッドです。drawメソッド内では、通常のポリゴンの頂点座標配列などを渡して描画する代わりに、VBOのIDを渡して描画を行っています。3. VBOの破棄必要のなくなったVBOはdeleteメソッド内で削除されます。
- [誤]
お問い合わせ
書籍の内容に関するお問い合わせはこちら。お答えできるのは本書に記載の内容に関することに限ります。













