看了些大家在论坛的讨论, 似乎有不少同学有意用 OpenGL ES 写游戏, 但又好像不知道从那方面入手, 所以我决定为 cocoachina.com 写几篇教程, 和大家分享一下我在这方面的经验, 希望对大家有点帮助, 也顺便推广一下 OpenGL ES 的应用! 

不过大家要注意的是, 这个教程所想包含的, 只是OpenGL ES 的入门和怎么利用它写 2D 游戏, 至于本教程标题, 只是哗众取巧之作, 不能期望有什么高深的学问呢 :).

 

让我们转入正题吧!在官方 SDK 建立一个 OpenGL ES 的项目非常简单, 只要选择”New Project”, 然后用” Cocoa Touch OpenGL Application” 的模版就可以了:

 

 

 

这时只要我们”Build and Go”, 就会看到一个旋转的彩色四方形.

 

 

这时我们会发现屏幕上面有一个不大好看的Status Bar, 要把它弄掉,可以在info.plist 里加上下面这句:

 

 

 

有了基本的东西, 接下来怎么做呢? 非常幸运的是SDK 提供了不少例子可供我们利用, 我们下载和打开 CrashLanding 看看, 项目里有几个档案我们可以拿来借用一下 :

 

 

 

 

我们把 Texture2D.h, Texture2D.m, OpenGL_Internal.h 拖拉到我们的 Classes 里 (记得选”Copy items…”) :

 

 

 

Texture2D非常好用,我们不只可以用它加载贴图, 更可以用它把贴图画上屏幕当为sprite 用, 这个不正是我们写游戏所需要的基本功能吗? 爽!

 

但在没编译前,我们还有一件事要做:把 CoreGraphics.framework 加到我们的 Frameworks !

 

 

跟着我们要把 OpenGL ES 的起始代码改一下, 让我们可以写2D 游戏, 这部份,我们可以在 layoutSubviews 里做:

 

 

- (void)layoutSubviews

{

    [EAGLContext setCurrentContext:context];

    [self destroyFramebuffer];

    [self createFramebuffer];

 

    glViewport(0, 0, backingWidth, backingHeight);

 

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    glOrthof(0, (float)backingWidth, 0, (float)backingHeight, 0, 100);

 

    glMatrixMode(GL_MODELVIEW);

    glLoadIdentity();

 

    glEnable(GL_TEXTURE_2D);

    glEnable(GL_BLEND);

    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

 

    glEnableClientState (GL_VERTEX_ARRAY);

    glEnableClientState (GL_TEXTURE_COORD_ARRAY);

 

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

 

 

    [self drawView];

}

 

好了, 做了这么多准备工作, 我们终于来到本篇最精彩的部份: 在屏幕上画图! 我们把想要用到的图拖拉到 Resources 里,就可以在程序里把它们加载应用:

 

 

bg = [[Texture2D alloc] initWithImagePath:@"bg.jpg"];

sprites = [[Texture2D alloc] initWithImagePath:@"planet.png"];

 

这样,我们在 drawView里就可以把图画在屏幕上了!

 

 

[bg drawAtPoint: CGPointMake(160.0f, 240.0f)];

[sprites drawAtPoint: CGPointMake(160.0f, 100.0f)];

 

 

看看我们的成果!很漂亮的画面啊!呵呵。。。这篇就写到这里,有时间再继续写下一篇。

 

 

注意:项目要用SDK Beta6编译!

 

 

本文的例子。如果你对iPhone游戏的开发有兴趣,请在和作者一起讨论OpenGL ES的开发心得。