在用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. 搭建个人/企业私有云盘-seafile

    一.安装依赖组件 安装前的准备工作安装 Seafile 服务器之前,请确认已安装以下软件MariaDB 或者 MySQL 服务器 (MariaDB 是 MySQL 的分支),python 2.7 (从 ...

  2. linux 搭建jenkins

    一.什么是持续集成? (1)Continuous integration(CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集 ...

  3. Oracle和可视化视图工具教程

    Oracle数据库安装教程 作者:黑小子-余 Qq:2931445528 微信:Y2931445528 可以找我,我有Oracle数据库安装包及工具   命令: Sqlplus /nolog Conn ...

  4. Objection基本原理

    1,Objection 的简介 就是一个依赖注入框架,github地址:https://github.com/atomicobject/objection 2,Objection 原理 3,Objec ...

  5. Java 连接 SQL Server 数据库

    //连接数据库 public Connection getConnection(){ //url为绝对路径 String url="jdbc:sqlserver://127.0.0.1:14 ...

  6. 018 Ceph的mon和osd的删除和添加

    一.OSD管理 1.1 移出故障osd 查看当前节点的osd的id [root@ceph2 ceph]# df -hT Filesystem Type Size Used Avail Use% Mou ...

  7. 最详细的自定义Spring Boot Starter开发教程

    1. 前言 随着Spring的日渐臃肿,为了简化配置.开箱即用.快速集成,Spring Boot 横空出世. 目前已经成为 Java 目前最火热的框架了.平常我们用Spring Boot开发web应用 ...

  8. 从零开始のcocos2dx生活(四)ActionManager

    文章目录 初始化构造函数 析构函数 删除哈希元素 分配存放动作对象的空间 通过索引移除动作 暂停动作 恢复动作 暂停所有的动作 恢复所有的动作 添加动作 移除所有的动作 移除target中的所有动作 ...

  9. $Codeforces\ 522D\ Closest\ Equals$ 线段树

    正解:线段树 解题报告: 传送门$QwQ$ 题目大意是说给定一个数列,然后有若干次询问,每次询问一个区间内相同数字之间距离最近是多少$QwQ$.如果不存在相同数字输出-1就成$QwQ$ 考虑先预处理出 ...

  10. Python 生成器和协程使用示例

    一.生成器的创建及使用 生成器比迭代器更节省内存空间,使用生成器,可以生成一个值的序列用于迭代,并且这个值的序列不是一次生成的,而是使用一个,再生成一个,的确可以使程序节省大量的内存损耗 创建生成器, ...