在游戏开发过程中,经常会遇到一些教程中没有提及的问题。这篇文章旨在修正之前教程中的一些遗漏,帮助顺利完成游戏的开发。
首先,需要确保游戏通过屏幕管理器来更新和绘制。在GLView.m
文件中,找到drawView
方法。在glBindFrameBufferOES()
调用下方,原本的[controller drawView:self];
需要被替换为以下代码:
// 更新视图
[controller updateView:self WithTime:(float)[animationTimer timeInterval]];
// 绘制视图
[controller drawView:self WithTime:(float)[animationTimer timeInterval]];
这样,就调用了控制器的updateView
和drawView
方法,并将动画计时器的时间间隔作为参数传递。现在,控制器将负责更新和绘制游戏屏幕。
其次,有些人可能没有在项目中添加空白纹理。建议使用图像编辑器创建一个名为“blankTexture.png
”的黑色图像,并将其拖入资源文件。在loadContent
方法中,屏幕管理器会分配输入管理器的内存,设置横屏模式,然后紧接着加载blankTexture.png
。如果没有这个文件,它将无法加载。
接下来是对内存管理的清理。在addScreen
方法中,不需要[screen retain]
,因为将其添加到屏幕的NSMutableArray
中时,对象已经被保留了。同样,在releaseScreen
方法中,除非希望在释放已经被释放的对象时游戏崩溃,否则需要去掉[screen release]
。
最后,可能会注意到纹理被“倒置”绘制了。这是因为改变了坐标系统的工作方式,而苹果的“Texture2D”类使用的是之前的坐标系统。这需要进行调整。有些人建议在绑定图像之前翻转图像,而采取的方法是调整Texture2D绘制方法中的顶点。
在drawAtPoint
方法中,注释掉当前的数组:
// 由Craig Giles修改,以在坐标系统中翻转纹理
GLfloat vertices[] = {
-width / 2 + point.x, height / 2 + point.y, 0.0,
width / 2 + point.x, height / 2 + point.y, 0.0,
-width / 2 + point.x, -height / 2 + point.y, 0.0,
width / 2 + point.x, -height / 2 + point.y, 0.0
};
// 由Craig Giles修改,以在坐标系统中翻转纹理
GLfloat vertices[] = {
rect.origin.x, rect.origin.y + rect.size.height, 0.0,
rect.origin.x + rect.size.width, rect.origin.y + rect.size.height, 0.0,
rect.origin.x, rect.origin.y, 0.0,
rect.origin.x + rect.size.width, rect.origin.y, 0.0
};