【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2352|回复: 0

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

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

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-6 09:55

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表