在用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使用经验总结(一)的更多相关文章

  1. MyEclipse10--的使用经验

    MyEclipse10--的使用经验总结 ------------------ 1.MyEclipse中的验证validation----->>用MyEclipse做ExtJs项目研发的时 ...

  2. Allegro之Win7下不能实时刷新操作显示的问题

    Allegro软件主界面下: setup-> user preferences-> display->opengl中选定disable_opengl,即关掉OpenGL后,再重新启动 ...

  3. XCode的个人使用经验

    Xcode是强大的IDE(但个人觉得不如Visual Studio做得好),其强大功能无需本人再赘述,本文也不是一篇“快捷键列表”,因为XCode上的快捷键极其多,而且还有不少是需要同时按下四个按键的 ...

  4. Allegro 导入DXF文件,保留布好的线路信息

    最近智能钥匙产品开发过程中,由于结构装配尺寸的偏差,需要对电路PCB外框OUTLINE进行缩小调整,并且USB插座定位孔改变. Allegro软件在线性绘制方面是有严重缺陷的,想绘制一个异形的板框比较 ...

  5. Flask-admin使用经验技巧总结

    笔者是看狗书入门的flask,狗书上对于flask-admin这个扩展并没有进行讲解,最近因为项目需要,学习使用flask-admin,瞬间体会到了flask开发的快速.扩展的强大 Flask-adm ...

  6. Allegro padstack

    在ALLEGRO中,建立PCB封装是一件挺复杂的事,而要建立FOOTPRINT,首先要有一个PAD,所以就要新建PADSTACK. 焊盘可以分两种,表贴焊盘和通孔焊盘,表贴焊盘结构相对简单,下面首先分 ...

  7. Allegro 快捷键设置

    一.快捷键设置 Allegro可以通过修改env文件来设置快捷键,这对从其它软件如AD或PADS迁移过来的用户来说,可以沿用以前的操作习惯,还是很有意义的. Allegro的变量文件一共有2个:一个是 ...

  8. Allegro Out Of Date Shapes原因及解决方法

    使用Allegro设计PCB板时,查看Status,经常会遇到out of date shapes的警告信息,具体如下: dynamic shape is still out of data or e ...

  9. Unity3D使用经验总结 缺点篇

    不论是从官方手册,还是各种第三方教程,几乎涉及到的,都是讲如何使用U3D,以及U3D的优点. 虽然我是用的一个让步语气,但请不要否认U3D的这些优点,它们的确存在. 但对于一个引擎的特性来说,优点与缺 ...

随机推荐

  1. dotnet 通过 WMI 获取系统启动的服务

    本文告诉大家如何通过 WMI 获取系统启动的服务 通过 Win32_Service 可以获取系统启动的服务 获取的时候只需要拿Caption和State就可以 var mc = "Win32 ...

  2. Qt4与Qt3的主要不同

    Qt4与Qt3的主要不同 1)QT4 中提供了大量新控件,虽然它也保持了旧的控件,并命名为Qt3XXX,但是这样的控件没准在今后的哪个QT版本中就不被支持了,所以还是换吧,控件替换的 工作是巨大的,这 ...

  3. P3803 FFT求多项式系数

    P3803 FFT求多项式系数 传送门:https://www.luogu.org/problemnew/show/P3803 题意: 这是一道FFT模板题,求多项式系数 题解: 对a和b的系数求一个 ...

  4. P3157 动态逆序对 CDQ分治

    动态逆序对 CDQ分治 传送门:https://www.luogu.org/problemnew/show/P3157 题意: 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对 ...

  5. (转)hibernate缓存机制详细分析

    在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别).二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题. 随笔虽长,但我相 ...

  6. Kali之msf简单的漏洞利用

    1.信息收集 靶机的IP地址为:192.168.173.136 利用nmap工具扫描其开放端口.系统等 整理一下目标系统的相关信息 系统版本:Windows server 2003 开放的端口及服务: ...

  7. Kafka学习笔记4--Kafka消费者的客户端(PHP)开发

    一.准备工作 虽然 Kafka 是用 Java/Scala 语言编写的,但这不妨碍它对多语言的支持.可以在 Kafka 官网的 CLIENTS 查看 Kafka 支持的语言,其中包括 C/C++.Py ...

  8. SofaBoot使用Nacos进行服务注册发现

    前提 最近创业公司的项目组基于业务需要,开发一套新的微服务,考虑到选用的组件必须是主流.社区活跃.生态完善以及方便迁移到云上等因素,引入了SOFAStack全家桶.微服务开发里面,一个很重要的功能就是 ...

  9. 【题解】HDU4689 Derangement(有技巧的计数DP)

    [题解]HDU4689 Derangement(有技巧的计数DP) 传送门 呵呵没告诉我多测组数,然后\(n\le 20,7000\mathrm{ms}\)我写了个状压上去T了 题目大意: 要你求错排 ...

  10. Java事务失效

    问题复现,用伪代码复现问题! 事务配置文件 <tx:advice id="txAdvice" transaction-manager="transactionMan ...