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
	};
我想这就是所有的更改。 再次感谢大家对最近几次文章的反馈! 我正在查看一些关于模板的文件,以便将其发布为起始模板。 会尽快通知大家! 如往常一样,如果您需要帮助,请随时通过电子邮件或发表评论与我联系。
阅读原始博客文章 这里。

