65.9K
CodeProject 正在变化。 阅读更多。
Home

iPhone 游戏框架:修正

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2009年6月2日

CPOL

2分钟阅读

viewsIcon

19313

教程中缺少一些内容。这是修订版,将补全最后的一些内容,让您重回正轨!

很高兴看到很多人拆解代码,并真正了解您可以做什么! 有几个人通过电子邮件与我联系,试图让一切正常运行,但如您所知,教程中缺少一些内容。 这是修订版,将补全最后的一些内容,让您重回正轨!

首先,在 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]];

您将调用控制器的 updateViewdrawView 方法,并从 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

	};

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

阅读原始博客文章 这里

© . All rights reserved.