iPhone 游戏框架:修正





5.00/5 (1投票)
教程中缺少一些内容。这是修订版,将补全最后的一些内容,让您重回正轨!
很高兴看到很多人拆解代码,并真正了解您可以做什么! 有几个人通过电子邮件与我联系,试图让一切正常运行,但如您所知,教程中缺少一些内容。 这是修订版,将补全最后的一些内容,让您重回正轨!
首先,在 GLView.m 文件中。 我们有一个屏幕管理器,但我们没有通过屏幕管理器告诉游戏更新或绘制。 让我们修复它! 进入您的 -(void)drawView
方法,并在 glBindFrameBufferOES()
调用下方,您应该有 [controller drawView:self];
我们将将其更改为以下内容
//
// Update the view
//
[controller updateView:self WithTime:(float)[animationTimer timeInterval]];
//
// Draw the view
//
[controller drawView:self WithTime:(float)[animationTimer timeInterval]];
您将调用控制器的 updateView
和 drawView
方法,并从 animationTimer
中传递一个时间间隔。 现在控制器将更新和绘制游戏屏幕!
其次,有些人没有将 blankTexture
添加到他们的项目中。 我建议打开一个图像编辑器,创建一个名为“blankTexture.png”的黑色图像,并将其拖到您的资源文件中。 您会注意到,在 loadContent
方法中,屏幕管理器为输入管理器分配内存,设置横向模式,然后立即加载一个 blankTexture.png。 如果没有它,就无法加载。
下一个修订更多的是“清理”,因为我没有完全理解 retain / release 系统的运作方式(嘿! 我也是一名新手 Mac 开发者! :D) 在您的 addScreen
方法中,您不需要 [screen retain],因为将其添加到 screens NSMutableArray
中会保留该对象。 同样,在 releaseScreen
方法中,您需要删除 [screen release],除非您希望在释放已经释放的屏幕时使游戏崩溃)
当一切正常工作时,您会注意到您的纹理被“倒置”绘制……好吧,由于我们更改了坐标系的工作方式,并且 Apple 的“Texture2D”类使用以前的坐标系,因此需要更改它。 有几种方法可以做到这一点; 真正了解 OpenGL 的一些人建议在绑定之前翻转图像……我采用的方法只是调整 Texture2D 绘制方法中的顶点。
这进入您的 drawAtpoint
方法,注释掉当前的数组
//
// Modified by Craig Giles to flip the texture upside down while
// using my coord system
//
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
};
这进入您的 drawAtRect
方法,注释掉当前的数组
//
// Modified by Craig Giles to flip the texture upside down while using
// my coord system
//
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
};
我想这就是所有的更改。 再次感谢大家对最近几次文章的反馈! 我正在查看一些关于模板的文件,以便将其发布为起始模板。 会尽快通知大家! 如往常一样,如果您需要帮助,请随时通过电子邮件或发表评论与我联系。
阅读原始博客文章 这里。