実践 iPad/iPhone ゲームプログラミング
- 書名:実践 iPad/iPhone ゲームプログラミング
- 著者:沼田 哲史
- 発刊:2010年11月3日
- 価格:2,940円(税込)(本体2,800円)
- 発行:秀和システム(出版社ウェブサイト)
- ISBN:978-4-7980-2778-4
- Amazon.co.jp で見る
正誤表
誤っている部分を赤字で、修正・追加部分を青文字で示しています。
- 29ページの最後の文で「実機デバイス上で自作アプリケーションの動作を確認する方法」を補足資料に記載していると書いてありますが、こちらの手順は本書には記載されておりません。この文は校正上の手違いで残ってしまいました。申し訳ありません。
- 89ページの最初のプログラムリストのファイル名が間違っています。
誤
SE再生用の変数の宣言 (ThreeThreeViewController.h)
正
SE再生用の変数の宣言 (HelpViewController.h)
- 113ページ下部のコード中、既存の変数宣言が2行分抜けています。
誤
@interface ThreeThreeViewController : UIViewController {
IBOutlet UIButton *playButton; // この1行を追加
IBOutlet UIButton *helpButton;
}
...
正
@interface ThreeThreeViewController : UIViewController {
IBOutlet UIButton *playButton; // この1行を追加
IBOutlet UIButton *helpButton;
AVAudioPlayer *sePlayerButton;
AVAudioPlayer *bgmPlayer;
}
...
- 114ページのコード中、viewWillAppear: メソッドの最後に「[bgmPlayer play];」の一行が抜けています。
誤
- (void)viewWillAppear:(BOOL)animated {
helpButton.alpha = 1.0;
helpButton.transform = CGAffineTransformIdentity;
playButton.alpha = 1.0;
playButton.transform = CGAffineTransformIdentity;
}
正
- (void)viewWillAppear:(BOOL)animated {
helpButton.alpha = 1.0;
helpButton.transform = CGAffineTransformIdentity;
playButton.alpha = 1.0;
playButton.transform = CGAffineTransformIdentity;
[bgmPlayer play];
}
- 123ページのコード中、「変数とメソッド宣言の追加(PlayViewController.h)」では、新たに追加した2つの変数の他に、既に追加された変数宣言があるのですが、それらの変数宣言の省略記号「…」が抜けています。
誤
...
@interface PlayViewController : UIViewController {
CALayer *movingLayer1;
CALayer *movingLayer2;
}
- (BOOL)swapLayers;
@end
正
...
@interface PlayViewController : UIViewController {
...
CALayer *movingLayer1;
CALayer *movingLayer2;
}
- (BOOL)swapLayers;
@end
- 157ページのコード中、最後の行のコードの引数名が間違っています。「mLayer」となっていますが、「layer」としてください。
誤
...
[self.view.layer addSublayer:mLayer];
正
...
[self.view.layer addSublayer:layer];
- 199ページのコード中、「#import <OpenGL ES/ES1/gl.h>」「#import <OpenGL ES/ES1/glext.h>」と書いてある部分がありますが、これらのインポート文のパス中の「OpenGL ES」は空白を含まない「OpenGLES」の誤りです。
誤
#import <OpenGL ES/ES1/gl.h>
#import <OpenGL ES/ES1/glext.h>
正
#import <OpenGLES/ES1/gl.h>
#import <OpenGLES/ES1/glext.h>
- 210ページの「メソッド実装の追加(PlayViewController.m)」では、最後に波括弧(閉じ)「}」が抜けています。
誤
(前半略)
- (void)updateModel {
//TODO: モデル変数の更新
正
(前半略)
- (void)updateModel {
//TODO: モデル変数の更新
} - 218ページのコード中、「#import <OpenGL ES/ES1/gl.h>」「#import <OpenGL ES/ES1/glext.h>」と書いてある部分がありますが、これらのインポート文のパス中の「OpenGL ES」は空白を含まない「OpenGLES」の誤りです。
誤
#import <OpenGL ES/ES1/gl.h>
#import <OpenGL ES/ES1/glext.h>
正
#import <OpenGLES/ES1/gl.h>
#import <OpenGLES/ES1/glext.h>
- 221ページのコード中、2行足りないコード部分があります。
誤
}
int batchPos = batchCount * 6;
batchData[batchPos].vx = (GLfloat)pos.x;
batchData[batchPos].vy = (GLfloat)pos.y;
batchData[batchPos+1].vx = (GLfloat)(pos.x + atlas.size.width);
batchData[batchPos+1].vy = (GLfloat)pos.y;
batchData[batchPos+2].vx = (GLfloat)pos.x;
batchData[batchPos+2].vy = (GLfloat)(pos.y + atlas.size.height);
batchData[batchPos+3].vx = (GLfloat)pos.x;
batchData[batchPos+3].vy = (GLfloat)(pos.y + atlas.size.height);
batchData[batchPos+4].vx = (GLfloat)(pos.x + atlas.size.width);
batchData[batchPos+4].vy = (GLfloat)(pos.y + atlas.size.height);
GLfloat tx = atlas.origin.x / width;
GLfloat ty = atlas.origin.y / height;
GLfloat tw = atlas.size.width / width;
GLfloat th = atlas.size.height / height;
(以下略)正
}
int batchPos = batchCount * 6;
batchData[batchPos].vx = (GLfloat)pos.x;
batchData[batchPos].vy = (GLfloat)pos.y;
batchData[batchPos+1].vx = (GLfloat)(pos.x + atlas.size.width);
batchData[batchPos+1].vy = (GLfloat)pos.y;
batchData[batchPos+2].vx = (GLfloat)pos.x;
batchData[batchPos+2].vy = (GLfloat)(pos.y + atlas.size.height);
batchData[batchPos+3].vx = (GLfloat)pos.x;
batchData[batchPos+3].vy = (GLfloat)(pos.y + atlas.size.height);
batchData[batchPos+4].vx = (GLfloat)(pos.x + atlas.size.width);
batchData[batchPos+4].vy = (GLfloat)(pos.y + atlas.size.height);
batchData[batchPos+5].vx = (GLfloat)(pos.x + atlas.size.height);
batchData[batchPos+5].vy = (GLfloat)(pos.y);
GLfloat tx = atlas.origin.x / width;
GLfloat ty = atlas.origin.y / height;
GLfloat tw = atlas.size.width / width;
GLfloat th = atlas.size.height / height;
(以下略) - 229ページの「画面描画のためのコードの追加(PlayViewController.m)」のコード中、コメントで「この2行を追加」とありますが、その上の3行も追加が必要です。
誤
- (void)drawView {
...
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
[playerSprite drawAtPoint:playerPos]; // この2行を追加
[playerSprite flushBatchDraws];
}
正
- (void)drawView {
...
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// 以下の5行を追加
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
[playerSprite drawAtPoint:playerPos];
[playerSprite flushBatchDraws];
}
- 259ページ下に「パーティクルの作成コードの追加(PlayViewController.m)」とありますが、「パーティクルの作成コードの追加(Item.m)」の誤りです。
誤(見出し部分)
パーティクルの作成コードの追加(PlayViewController.m)
正(見出し部分)
パーティクルの作成コードの追加(Item.m)
- 305ページのコード中、「#import <OpenGL ES/ES1/gl.h>」「#import <OpenGL ES/ES1/glext.h>」と書いてある部分がありますが、これらのインポート文のパス中の「OpenGL ES」は空白を含まない「OpenGLES」の誤りです。
誤
#import <OpenGL ES/ES2/gl.h>
#import <OpenGL ES/ES2/glext.h>
正
#import <OpenGLES/ES2/gl.h>
#import <OpenGLES/ES2/glext.h>
- 307ページの7.2節の最後に、次の文が必要です。
そして、「GLSprite.h」「GLSprite.m」「Character.h」「Character.m」「Particle.h」「Particle.m」の6つのファイルを削除してください。
- 324ページからのコード中、linkProgram: メソッドの実装コードが抜けています。次のコードを PlayViewController.m ファイルの最後に付け足してください。
- (BOOL)linkProgram:(GLuint)prog {
GLint status;
glLinkProgram(prog);
GLint logLength;
glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &logLength);
if (logLength > 0) {
GLchar *log = (GLchar *)malloc(logLength);
glGetProgramInfoLog(prog, logLength, &logLength, log);
NSLog(@"Program link log:\n%s", log);
free(log);
}
glGetProgramiv(prog, GL_LINK_STATUS, &status);
if (status == 0) {
return NO;
}
return YES;
}