在用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. 在eclipse动态网页项目中,编写web.xml时,servlet标签报错.

    cvc-complex-type.2.4.b: The content of element 'servlet' is not complete. One of '{"http:// jav ...

  2. CodeForces - 375D Tree and Queries (莫队+dfs序+树状数组)

    You have a rooted tree consisting of n vertices. Each vertex of the tree has some color. We will ass ...

  3. 计算机网络OSI模型

    一. 理想模型-OSI 7层模型 那么数据是如何传输的呢?看下图:上层的Header+DATA作为新的Data再次被封装,到达目的地后就像剥洋葱一样掐头(去尾)最终留下你所要传的数据. 各层功能详细阐 ...

  4. Linux基础:Linux下常用命令

    常用命令 shutdown ​ 用来系统关机命令.shutdown指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作. ​ shutdown (选项)(参数) -c: 当执行"s ...

  5. C#反射与特性(一):反射基础

    目录 C#反射与特性(一):反射基础 1. 说明 1.1 关于反射.特性 2. 程序集操作 2.1 获取 程序集对象(Assembly) 2.2 Assembly 使用 2.3 获取程序集的方式 C# ...

  6. 开发板免费领!腾讯云IoT应用创新大赛正式启动!

    大赛简介 腾讯云IoT应用创新大赛是腾讯云面向物联网领域举办的大型竞赛,通过腾讯云IoT全链路产品能力,开放平台和服务,与广大开发者共同创新,孵化优秀的IoT产品和解决方案,共同构建IoT应用生态. ...

  7. JS-数组常用方法整理

    想了解数组有哪些原生方法,控制台输出,如图: length:数组的实例属性,返回或设置一个数组中的元素个数. toString():可以把数组转换成字符串,并返回结果. toLocaleString( ...

  8. win32简单的sockeTCP协议通信

    什么也不说了看代码 首先是服务端代码 #include <stdio.h> #include <stdlib.h> #include <WinSock2.h> #i ...

  9. Angular Schematics 三部曲之 Add

    前言 因工作繁忙,差不多有三个月没有写过技术文章了,自八月份第一次编写 schematics 以来,我一直打算分享关于 schematics 的编写技巧,无奈还是拖到了年底. Angular Sche ...

  10. java高并发梳理