游戏开发教程修正版

游戏开发过程中,经常会遇到一些教程中没有提及的问题。这篇文章旨在修正之前教程中的一些遗漏,帮助顺利完成游戏的开发。

屏幕管理器的更新和绘制

首先,需要确保游戏通过屏幕管理器来更新和绘制。在GLView.m文件中,找到drawView方法。在glBindFrameBufferOES()调用下方,原本的[controller drawView:self];需要被替换为以下代码:

// 更新视图 [controller updateView:self WithTime:(float)[animationTimer timeInterval]]; // 绘制视图 [controller drawView:self WithTime:(float)[animationTimer timeInterval]];

这样,就调用了控制器的updateViewdrawView方法,并将动画计时器的时间间隔作为参数传递。现在,控制器将负责更新和绘制游戏屏幕。

添加空白纹理

其次,有些人可能没有在项目中添加空白纹理。建议使用图像编辑器创建一个名为“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 };
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485