您的位置:首页 > 运维架构

游戏是这样写成的 (第一篇: 建立 OpenGL ES 项目)

2012-02-03 14:59 281 查看
看了些大家在论坛的讨论, 似乎有不少同学有意用 OpenGL ES 写游戏, 但又好像不知道从那方面入手, 所以我决定为 cocoachina.com 写几篇教程, 和大家分享一下我在这方面的经验, 希望对大家有



看了些大家在论坛的讨论, 似乎有不少同学有意用 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的开发心得。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: