使用OpenGL ES的开源Cover Flow,据说有好几个上架程序中都有使用,见http://www.chaosinmotion.com/flowcover.m。
-
21
Aug 10
0 comments -
23
Jul 10xml的解析运用的十分广泛,我以前也介绍过使用ticpp(tinyxml的c++版本)进行简单的xml解析,见跨平台代码分享之三–xml解析器,它是采用DOM进行解析。iPhone SDK中自带的NSXMLParsers也可进行xml解析,但是对于解析web server下载的大型文件时效率不够高,有一个第三方的objective c expat wrapper 采用expat(SAX方式)进行解析,效率非常高。据有人测试,其效率相对于NSXMLParsers约提高了70-80%。
下面是其下载地址。
-
3
Mar 10 -
18
Jan 10我目前正在开发一个跨平台游戏引擎,我准备将整个开发过程通过博客记录下来。欢迎各位朋友提出宝贵意见。
下面是我的设计文档初稿。
项目名称
Portable Game Engine (PGE )
目标
- 跨平台,希望能支持Windows,Linux,Mac OSX,iPhone,WinCE, Android, Blackberry, Symbian phone 等
- 简单,尽量简化编程接口
- 2D和3D
- 组件可选,以减小目标代码
- 支持Unicode
组件
- 核心:游戏主循环,线程,垃圾收集,插件等
- 图形系统(采用OpenGL或OpenGL ES):图像(纹理),动画,字体
- 声音系统(采用OpenAL):音效,音乐,乐器
- 资源管理器:压缩/解压,加密/解密
- 输入:键盘,鼠标及触摸屏(重力感应)
- 网络:Tcp/ip,Http, UDP
- GUI(用户接口):菜单,文本,按钮,列表框,下拉框,选择框
- 游戏AI
- 游戏Physics
开发按阶段进行。第一阶段开发Windows下的OpenGL 2D引擎,然后移植到iPhone下。
-
6
Jan 10游戏都需要一个声音引擎,一般来说,有三种类型:
- 播放音效。音效一般是比较简短的声音文件。
- 播放背景音乐。
- 乐器,音效模拟。
本文介绍一个简单跨平台的音效引擎,主要针对第一种类型。实际上,也可以适用于第二种类型,但由于背景音乐文件较大,占用内存较大,所以本文介绍的方法并不是最为有效率的(特别是对于像iPhone之类内存较为紧张的平台,但仍然可用)。可以在本引擎的基础上加以改进,比如采用“流”(streaming)技术。而第三种类型,可能涉及到DSP(数字处理技术),比较复杂,另外在不同平台有一些不同的技术,如Windows下的VST/VSTi,Mac OSX下的AU等,不在本文的讨论范围。
本文介绍的音效引擎是基于OpenAL的,并且是我在许多项目中使用的引擎的简化部分(去除错误处理及乐器模拟部分)。
有关OpenAL的使用,网上有许多教程,比如:OpenAL编程教程等。iPhone上的OpenAL使用,本网站也有几篇文章。所以这里不再赘述。
本引擎的目的,是简化声音播放接口。最简单的情况下可以仅仅使用两条语句,就播放一段音效。而繁复的OpenAL初始化功能等都由引擎自动完成。下例展示了怎样播放一段音效的最为典型的调用:
1
2
3audio::CSound sound("sound.wav");
sound.play();本引擎由三个类和一个公共函数构成。audio::CEngine是引擎的核心部分,它是一个单例类(Singleton),负责直接与OpenAL接口,用户无需与其打交道。audio::CBuffer类对应于OpenAL中的缓存,通过audio::openAudioData函数打开音效文件,创建内部缓存,用户也无需直接使用。audio::CSound是用户直接使用的类,它提供了诸如play(),stop(),setVolume()和setPosition()几个接口函数。如需扩展功能,添加一些其他功能,可以直接加在此类中,并在audio::CEngine中实现。
以上三个类可以直接使用在不同平台中。与平台相关的代码,都在audio::openAudioData()中。它的作用是打开不同的声音文件。对于Windows,我使用了一个开源项目库libsndfile,用来打开诸如wav,caf,aiff,flac,ogg等常用音效文件(注意:mp3并未包括其中。由于使用mp3的软件需要支付一定许可证费用,本人也不喜欢使用)。而对于Mac OSX(iPhone),则使用了core audio。这里大家可能会有一个疑问,既然libsndfile也是跨平台的,为什么在iPhone上不使用它呢?确实,libsndfile支持Windows,Linux,Mac OSX,Sun Solaris等平台,而iPhone并不支持ogg等格式,使用libsndfile不正好填补这个空白?是的,我也是这样想的,但是,有两点原因初始我暂时没有使用它:
- 没有现成的iPhone库。由于libsndfile需要使用makefile由GCC编译(我曾试过使用Xcode编译,没有成功),我也不是这方面的专家。但是,libsndfile在Mac OSX下编译没有问题,所以只需稍作修改,在为iPhone进行编译也不是没有可能的事情。
- 由于其许可证的限制。libsndfile是基于LGPL的,它要求使用者采用动态连接库,而众所周知,iPhone(官方)是不支持动态链接的。如果使用静态链接,则需要随软件发布源代码或目标代码。其实,这也不是无法克服的,LGPL只要求发布与libsnd相关的目标代码,所以对你的软件并无影响。对吗?
本文给出了Windows下和iPhone下的应用。在Windows下使用需要下载OpenAL SDK和libsndfile。为方便编译好的libsndfile随示例程序给出给出。(你需要修改一下VS 项目文件中的有关OpenAL的头文件和库文件路径,另外,在OpenAL include目录中创建一个OpenAL目录,并将.h复制到其下,这样我就不需要修改#include语句了。)
示例程序audiolib下载。(项目在test目录下)
-
29
Dec 09Poco C++是一个强大的跨平台C++库,你可以在iPhone程序中使用它,如果:
- 你打算使你的程序跨平台。
- 你喜欢使用C++或希望使用Poco C++中的功能如:XML,Zip等。
目前,最新Poco C++版本为1.3.6P1,根据文档,它可以编译为iPhone静态库。但是我试用了一下,无法使用在iPhone Xcode项目中链接,不知何故。所以我自己创建了下列Xcode项目:
- Poco Foundation
- Poco Util
- Poco Net
- Poco XML
- Poco Zip
另外,由于Crypto,Data,NetSSL_OpenSSL库需要外部库而且目前我不需要使用,所以没有包括。另外我增加了一个目录iPhoneSamples,它目前包括了一个示例程序HelloPoco,演示了怎样在iPhone项目中使用Poco C++库(此演示程序十分简单,它调用Poco中的UUID功能,产生一个UUID,显示与屏幕上)。下面是包括了此展示程序以及各Xcode文件的Poco包的下载:
-
16
Dec 09做项目时发现一个开源C++库,称为POCO(POrtable COmponents – 可移植元件),非常方便好用。
特性:
* 线程,程序同步及多线程编程高级抽象
* 流及文件系统访问
* 共享库将类加载
* 功能强大的日志和错误报告
* 安全及加密
* 网络编程 (TCP/IP 套接字, HTTP客户端和HTTP服务器, FTP, SMTP, POP3, 等)
* XML解析 (SAX2 和 DOM) 及生成
* 配置文件及选项处理
* SQL数据库访问(ODBC, MySQL, SQLite)可以运行的平台包括:
* Windows
* Mac OS X
* iPhone OS
* (embedded) Linux
* HP-UX
* Tru64
* Solaris
* QNX -
29
Nov 09虽然iPhone上可以直接调用email程序发送email,但如果你需要直接通过SMTP发送邮件,这个开源项目可能对你十分有帮助:
-
13
Nov 09发现一款App Store上架游戏的源代码,游戏名为Tweejump。它是以Cocos2D为引擎的。想学习开源Cocos2D引擎的朋友可以参考下。

源码下载地址在Github,直接按“Download”就可以下载了。



