|
<p><img height="384" alt="" src="http://www.cocoachina.com/wp-content/uploads/game-iphone-cover.png" width="298"/></p>
<p>看了些大家在论坛的讨论, 似乎有不少同学有意用 OpenGL ES 写游戏, 但又好像不知道从那方面入手, 所以我决定为 cocoachina.com 写几篇教程, 和大家分享一下我在这方面的经验, 希望对大家有点帮助, 也顺便推广一下 OpenGL ES 的应用! </p>
<p>不过大家要注意的是, 这个教程所想包含的, 只是OpenGL ES 的入门和怎么利用它写 2D 游戏, 至于本教程标题, 只是哗众取巧之作, 不能期望有什么高深的学问呢 .</p>
<p><span id="more-197"></span></p>
<p> </p>
<p>让我们转入正题吧!在官方 SDK 建立一个 OpenGL ES 的项目非常简单, 只要选择”New Project”, 然后用” Cocoa Touch OpenGL Application” 的模版就可以了:</p>
<p> </p>
<p><img height="164" alt="" src="http://www.cocoachina.com/wp-content/uploads/igame-template.png" width="193" border="1"/></p>
<p> </p>
<p> </p>
<p>这时只要我们”Build and Go”, 就会看到一个旋转的彩色四方形.</p>
<p> </p>
<p><img height="742" alt="" src="http://www.cocoachina.com/wp-content/uploads/igame-sim.png" width="386"/></p>
<p> </p>
<p>这时我们会发现屏幕上面有一个不大好看的Status Bar, 要把它弄掉,可以在info.plist 里加上下面这句:</p>
<p> </p>
<p><img height="71" alt="" src="http://www.cocoachina.com/wp-content/uploads/igame-fullscreen.png" width="333" border="1"/></p>
<p> </p>
<p> </p>
<p>有了基本的东西, 接下来怎么做呢? 非常幸运的是SDK 提供了不少例子可供我们利用, 我们下载和打开 CrashLanding 看看, 项目里有几个档案我们可以拿来借用一下 :</p>
<p> </p>
<p> </p>
<p><img height="316" alt="" src="http://www.cocoachina.com/wp-content/uploads/igame-crashlanding.png" width="344" border="1"/></p>
<p> </p>
<p> </p>
<p>我们把 Texture2D.h, Texture2D.m, OpenGL_Internal.h 拖拉到我们的 Classes 里 (记得选”Copy items…”) :</p>
<p> </p>
<p><img height="370" alt="" src="http://www.cocoachina.com/wp-content/uploads/igame-dragdrop.png" width="400" border="1"/></p>
<p> </p>
<p> </p>
<p>Texture2D非常好用,我们不只可以用它加载贴图, 更可以用它把贴图画上屏幕当为sprite 用, 这个不正是我们写游戏所需要的基本功能吗? 爽!</p>
<p> </p>
<p>但在没编译前,我们还有一件事要做:把 CoreGraphics.framework 加到我们的 Frameworks !</p>
<p> </p>
<p><img height="593" alt="" src="http://www.cocoachina.com/wp-content/uploads/igame-framework.png" width="390" border="1"/></p>
<p> </p>
<p>跟着我们要把 OpenGL ES 的起始代码改一下, 让我们可以写2D 游戏, 这部份,我们可以在 layoutSubviews 里做:</p>
<p> </p>
<p> </p>
<p>- (void)layoutSubviews</p>
<p>{</p>
<p> [EAGLContext setCurrentContext:context];</p>
<p> [self destroyFramebuffer];</p>
<p> [self createFramebuffer];</p>
<p> </p>
<p> glViewport(0, 0, backingWidth, backingHeight);</p>
<p> </p>
<p> glMatrixMode(GL_PROJECTION);</p>
<p> glLoadIdentity();</p>
<p> glOrthof(0, (float)backingWidth, 0, (float)backingHeight, 0, 100);</p>
<p> </p>
<p> glMatrixMode(GL_MODELVIEW);</p>
<p> glLoadIdentity();</p>
<p> </p>
<p> glEnable(GL_TEXTURE_2D);</p>
<p> glEnable(GL_BLEND);</p>
<p> glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);</p>
<p> </p>
<p> glEnableClientState (GL_VERTEX_ARRAY);</p>
<p> glEnableClientState (GL_TEXTURE_COORD_ARRAY);</p>
<p> </p>
<p> glClearColor(0.0f, 0.0f, 0.0f, 1.0f);</p>
<p> </p>
<p> </p>
<p> [self drawView];</p>
<p>}</p>
<p> </p>
<p>好了, 做了这么多准备工作, 我们终于来到本篇最精彩的部份: 在屏幕上画图! 我们把想要用到的图拖拉到 Resources 里,就可以在程序里把它们加载应用:</p>
<p> </p>
<p> </p>
<p>bg = [[Texture2D alloc] initWithImagePath"bg.jpg"];</p>
<p>sprites = [[Texture2D alloc] initWithImagePath"planet.png"];</p>
<p> </p>
<p>这样,我们在 drawView里就可以把图画在屏幕上了!</p>
<p> </p>
<p> </p>
<p>[bg drawAtPoint: CGPointMake(160.0f, 240.0f)];</p>
<p>[sprites drawAtPoint: CGPointMake(160.0f, 100.0f)];</p>
<p> </p>
<p> </p>
<p>看看我们的成果!很漂亮的画面啊!呵呵。。。这篇就写到这里,有时间再继续写下一篇。</p>
<p> </p>
<p><img height="742" alt="" src="http://www.cocoachina.com/wp-content/uploads/igame-screen.png" width="386"/></p>
<p> </p>
<p>注意:项目要用SDK Beta6编译!</p> |
|