allegro使用经验总结(一)
来源:互联网 发布:传奇网络加速器 编辑:程序博客网 时间:2024/05/16 16:57
在用allegro开发flappy bird。游戏虽然小,但是用到了allegro的方方面面,可以说是“麻雀虽小五脏俱全”。
1.physfs
这是一个跨平台的读写文件的库,可以直接读取各种压缩文件
想要读文件,需要将文件所在目录添加进physfs中,之后读取文件只需给文件名。使用函数 int PHYSFS_addToSearchPath(const char *newDir, int appendToPath); 可以添加文件夹,也可以添加压缩文件
想要写文件,需要设置写目录,使用函数 int PHYSFS_setWriteDir(const char *newDir); 参数是文件夹路径,暂时没有测试压缩文件能不能做为写目录。
2.allegro的声音播放
要使用allegro的声音组件,首先要初始化。
al_init_acodec_addon();al_install_audio();al_reserve_samples(n);
allegro播放声音采用三层结构: Voice->Mixer->Sample_Instance
在调用al_reserve_samples() 函数后会自动创建Voice并附加一个Mixer,这个Mixer将成为默认的Mixer。使用Sample加载音乐,然后用Sample创建实例Sample_Instance,再把该Sample_Instance 附加到Mixer上,这样就可以播放音乐了。
al_reserve_samples() 可以不调用,你可以自己创建Voice,Mixer,调用这个只是一种默认的方案。这个函数的参数表示了可以附加在这个函数创建的MIxer上的Sample_Instance数量。
3.MyGUI的委托机制
这个委托机制确实很好用,应该善加利用。比如在flappy bird中,鸟飞过了某个坐标(或者说钢管移过了某个坐标),就可以使用委托机制,通知游戏主类,分数增加一分。等等
4.MyGUI的ControllerPosition
MyGUI提供了三种渐变效果,透明度渐变,位置大小渐变和边缘隐藏显现。你也可以扩展为自己的渐变效果重载 ControllerItem类即可。
ControllerPosition有三个设置目标位置大小的函数:setCoord()、setSize()和setPosition()。setCoord()是指每帧同时改变位置和大小,setSize()是指每帧只改变大小,setPosition()每帧只改变位置。
setFunction()和setAction()作用一样,都是设置动作,即每帧怎么移动。区别是setFunction()的参数是字符串,而setAction()的参数是FrameAction::IDelegate*。
5.flappy bird这种卷轴移动类游戏的小技巧
如果让小鸟一直移动,坐标会越来越大,总有一种变量溢出的感觉,当然了,一般不会飞那么远。我们可以换一种思维,让小鸟仅仅上下移动,而让钢管向左移动,这样小鸟的横坐标永远是那一个值。
另一个技巧是,当钢管移出屏幕后,不要销毁,而是把它存起来,到需要新钢管的时候,再重新调用它。这样避免了频繁的new delete。
- allegro使用经验总结(一)
- allegro操作总结(一)
- C++容器使用经验总结(一)
- CPLEX使用中的一点经验总结(一)
- C++容器使用经验总结(一)
- C++容器使用经验总结(一)
- allegro转pads(使用allegro 16.3和pads9.3.1)
- allegro转pads(使用allegro 16.3和pads9.3.1)
- Allegro PCB简单操作(一)
- Memcached/Libmemcached使用经验总结(一)
- [ACM] 经验总结(一)
- 项目经验总结(一)
- 开发经验总结(一)
- 2D游戏引擎Allegro 系列教程(一) 配置allegro开发环境
- Allegro学习笔记一
- iOS 开发经验总结(一)
- VC List控件使用经验总结一
- Allegro设置及实用小技巧(一)
- 【历史回顾】Linux发展一览
- YUV 420P IOS中的呈现
- 如何修炼成某一领域的高手
- java 多线程 基础
- 各种开源协议介绍 BSD、Apache Licence、GPL V2 、GPL V3 、LGPL、MIT
- allegro使用经验总结(一)
- 专访联想谢政维:功耗和价格是天蝎项目最大障碍!
- Android开发过程中git、repo、adb、grep等指令的使用
- 双网卡双网关的设置
- 判断iframe里的页面加载完成
- JAVA 的 OBJECT 类型转 INT 方法
- Android系统内置应用更新或升级后被还原的原因
- device eth0 does not seem to be present, delaying initialization
- C#学习笔记(二) 标准Dispose模式的实现