allegro使用经验总结(一)
在用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使用经验总结(一)的更多相关文章
- MyEclipse10--的使用经验
MyEclipse10--的使用经验总结 ------------------ 1.MyEclipse中的验证validation----->>用MyEclipse做ExtJs项目研发的时 ...
- Allegro之Win7下不能实时刷新操作显示的问题
Allegro软件主界面下: setup-> user preferences-> display->opengl中选定disable_opengl,即关掉OpenGL后,再重新启动 ...
- XCode的个人使用经验
Xcode是强大的IDE(但个人觉得不如Visual Studio做得好),其强大功能无需本人再赘述,本文也不是一篇“快捷键列表”,因为XCode上的快捷键极其多,而且还有不少是需要同时按下四个按键的 ...
- Allegro 导入DXF文件,保留布好的线路信息
最近智能钥匙产品开发过程中,由于结构装配尺寸的偏差,需要对电路PCB外框OUTLINE进行缩小调整,并且USB插座定位孔改变. Allegro软件在线性绘制方面是有严重缺陷的,想绘制一个异形的板框比较 ...
- Flask-admin使用经验技巧总结
笔者是看狗书入门的flask,狗书上对于flask-admin这个扩展并没有进行讲解,最近因为项目需要,学习使用flask-admin,瞬间体会到了flask开发的快速.扩展的强大 Flask-adm ...
- Allegro padstack
在ALLEGRO中,建立PCB封装是一件挺复杂的事,而要建立FOOTPRINT,首先要有一个PAD,所以就要新建PADSTACK. 焊盘可以分两种,表贴焊盘和通孔焊盘,表贴焊盘结构相对简单,下面首先分 ...
- Allegro 快捷键设置
一.快捷键设置 Allegro可以通过修改env文件来设置快捷键,这对从其它软件如AD或PADS迁移过来的用户来说,可以沿用以前的操作习惯,还是很有意义的. Allegro的变量文件一共有2个:一个是 ...
- Allegro Out Of Date Shapes原因及解决方法
使用Allegro设计PCB板时,查看Status,经常会遇到out of date shapes的警告信息,具体如下: dynamic shape is still out of data or e ...
- Unity3D使用经验总结 缺点篇
不论是从官方手册,还是各种第三方教程,几乎涉及到的,都是讲如何使用U3D,以及U3D的优点. 虽然我是用的一个让步语气,但请不要否认U3D的这些优点,它们的确存在. 但对于一个引擎的特性来说,优点与缺 ...
随机推荐
- h5 页面 实现单选题,多选题功能。
效果图: 项目要求: 1:实现单选题和多选题区分 (这个根据后端传来的数据判断 ) 2 单选选中效果 和 多选选中效果(利用input 和label ) 3.答题成功与失败 分单选和多选的情况 ...
- 基于jquery的带事件显示功能的日历板插件calendar.js
项目中需要用到一个日历板控件,要求能显示事件,于是想到了一年前在app项目上写的一个粗略版日历板,然后又想着这个可能以后还会用 于是我就封装了一下,能满足基本要求,如果有需要更多功能的也可以自行修改源 ...
- 从零开始のcocos2dx生活(九)CCBReader
NodeLoaderLibrary是用来存储节点加载器类型的类,通过registerDefaultNodeLoaders()可以注册所有默认类型的加载器 在CocosBuilder的使用手册中: 1. ...
- 解决echarts中的点击事件点击后走多次接口
使用echarts图点击图之后,走了很多次接口,后来发现添加一个off事件就可以解决了,具体如下:
- $Codeforces\ 522D\ Closest\ Equals$ 线段树
正解:线段树 解题报告: 传送门$QwQ$ 题目大意是说给定一个数列,然后有若干次询问,每次询问一个区间内相同数字之间距离最近是多少$QwQ$.如果不存在相同数字输出-1就成$QwQ$ 考虑先预处理出 ...
- 洛谷$P$2522 $Problem\ b\ [HAOI2011]$ 莫比乌斯反演
正解:莫比乌斯反演 解题报告: 传送门! 首先看到这个显然就想到莫比乌斯反演$QwQ$? 就先瞎搞下呗$QwQ$ $gcd(x,y)=k$,即$gcd(\left \lfloor \frac{x}{k ...
- acwing 1250. 格子游戏 并查集
地址 https://www.acwing.com/problem/content/1252/ Alice和Bob玩了一个古老的游戏:首先画一个 n×nn×n 的点阵(下图 n=3n=3 ). 接着, ...
- vue项目使用v-charts的柱形图的各种样式和数据配置
找了很多网上关于v-charts的柱形图使用,我发现我一模一样的配置就是没有效果,我原来是按需引入的, import VeHistogram from 'v-charts/lib/histogram' ...
- mongodb 更新嵌套数组的值
概要 本文主要讲述在 mongodb 中,怎么更新嵌套数组的值. 使用$更新数组 基本语法 { "<array>.$" : value } 可以用于:update, ...
- Redis内存碎片清理
当Redis中清理了大量的Key之后原先Redis申请的内存(used_memory_rss)将继续持有而不会释放,此时查看内存信息将会看到存在大量的内存碎片.那么,Redis的内存碎片可以清理么,该 ...