Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5513838
  • 博文数量: 763
  • 博客积分: 12108
  • 博客等级: 上将
  • 技术积分: 15717
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-28 21:21
个人简介

业精于勤,荒于嬉

文章分类

全部博文(763)

文章存档

2018年(6)

2017年(15)

2016年(2)

2015年(31)

2014年(14)

2013年(87)

2012年(75)

2011年(94)

2010年(190)

2009年(38)

2008年(183)

2007年(28)

分类: 嵌入式

2010-08-11 10:20:13

更新歷史:
2009.07.26
- OS 3.0 修正.
(本更新檔案為附件中GameBoxDemo5.SDK3.0.zip)

2009.03.28 ()
- hgeParticleSystem (粒子系統)
- hgeDistortionMesh (圖像特效)
(本更新檔案為附件中GameBoxDemo5.rar, 模块稍後補上)

2009.03.27 ()
- 新增 CCAssetBox
(本更新檔案為附件中CCGameBox Application.zip, Sidewalk_with_example.rar 和 GameBoxDemo4.rar)

2009.03.23 ()
- 新增 CCFont
- 新增 CCMD2Model
- 模块(以後均由cnsoft負責)和示範例子獨立包裝.
(本更新檔案為附件中CCGameBox Application.zip 和 GameBoxDemo3.zip)

2009.03.20 ()
- 新增音樂聲效類 CCSoundBox
(注意事項: 同一時間只能有一段音樂在播放, 截入另一段音樂之前,應先把正在記憶中的清除).
- 新icon (感謝ga老大)
(項目打包: 本貼附件的iDemo8c.zip)

2009.03.19 ():
- 支持PVR compressed貼圖
- 支持橫屏設定
- 新增精靈類 CCSprite
(項目打包: 本貼附件的iDemo8b.zip)

2009.03.18 (本貼):
- 第一版發佈

安裝方法:
- 利用cnsoft 提供的下截和安裝腳本:
- 下截本貼附件, 自行還原到XCODE 有關目錄.

---------------------------------------------------------------------------

大家先看一下這個截圖, 有什麼特別的地方嗎? 答案...




答案是: 沒有!

表面上它的確跟最早幾篇教程的截圖沒什麼分別, 但看不到的地方: 程序底層, 郤有了非常大的改變!

寫了幾篇基本的東西, 我想大家對於在 iPhone 上運用OpenGL ES 己有了一些認識, 現在也是時候來個小結了! 我把之前的東西整理了一下, 也把整個結構改變了, 為打造一個比較正規的2D 遊戲程序庫作好準備! 因為過於簡陋, 不敢叫它作引擎, 我就稱之為遊戲盒子吧!

正式向大家介紹: CCGameBox 0.1a

(請大家記住, CC stands for CocoaChina !!!)

這是 CCGameBox 第一版, 現在只包括了圖形渲染部份.

類的列表:

- CCRenderBox : 包括所有和圖像方面有關的功能, 如截入貼圖, 畫圖等.
- CCTexture: 貼圖類.
- CCImage: 可以被渲染的基本圖像類.

這是一個 OpenGL ES 庫, 所以一般都會用在用 Cocoa Touch 模块建出來的項目, 利用 CCGameBox  編程, 首先我們要引進 CCGameBox.h :
复制代码
  1. #import "CCGameBox.h"


在初始化了OpenGL ES 之後, 我們要用 CCGameBoxInit() 來初始化一下我們的盒子:
复制代码
  1. - (void)layoutSubviews
  2. {
  3.     [EAGLContext setCurrentContext:context];
  4.     [self destroyFramebuffer];
  5.     [self createFramebuffer];
  6.     
  7.     CCGameBoxInit();
  8.     gameApp = new GameApp();
  9.     
  10.     [self drawView];
  11. }


接著在render 循環里, 我們就可以很方便的以 CCGameBox  的 singleton 物件大展拳腳了!
复制代码
  1. - (void)drawView
  2. {
  3.     
  4.     CFTimeInterval time = CFAbsoluteTimeGetCurrent();
  5.     float dt = time - mOldTime;
  6.     mOldTime = time;
  7.     
  8.     if (gameApp)
  9.         gameApp->Update(dt);
  10.         
  11.     [EAGLContext setCurrentContext:context];
  12.     
  13.     glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
  14.     CCRenderBox *renderBox = CCRenderBox::GetInstance();
  15.     renderBox->RenderBegin();
  16.     
  17.     if (gameApp)
  18.         gameApp->Render();
  19.     
  20.     renderBox->RenderEnd();
  21.     
  22.     glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
  23.     [context presentRenderbuffer:GL_RENDERBUFFER_OES];
  24.     
  25.     [[NSRunLoop currentRunLoop] runUntilDate: [NSDate distantPast]];
  26. }


最後在我們的程序結束時, 用  CCGameBoxDestroy() 移除 CCGameBox  !
复制代码
  1. - (void)dealloc
  2. {
  3.     
  4.     [self stopAnimation];
  5.     
  6.     if ([EAGLContext currentContext] == context)
  7.     {
  8.         [EAGLContext setCurrentContext:nil];
  9.     }
  10.     
  11.     delete gameApp;
  12.     
  13.     CCGameBoxDestroy();
  14.     
  15.     [context release];    
  16.     [super dealloc];
  17. }


當然, 大家要是懶得理會這些亂七八糟的初始工作, 可以直接更改 GameApp.cpp 和 GameApp.h 來實現自己的東西, 比如寫個遊戲! (其實還要等一等, 還有不少功能沒加呢...)

早期的CCSprite 沒有優化, 每渲染一次, 都會更換一次貼圖和調用一次 glDrawArrays, 要是有大量的 CCSprite 要渲染, 速度就會很慢! CCRenderBox 在這方面作出了優化, 貼圖只在有需要時才更換, 而另外也加了一個頂點緩存, 集合了一堆才一次性渲染至螢幕!

有時間我會慢慢把其他功能加到 CCGameBox , 有興趣的朋友請留意這個貼子的更新哦!
 
附件: (128 K) 下载次数:760
附件: (461 K) 下载次数:622
附件: (693 K) 下载次数:790
附件: (562 K) 下载次数:717
附件: (488 K) 下载次数:668
附件: (1687 K) 下载次数:908
附件: (545 K) 下载次数:761
阅读(1390) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~