关于有限状态机(FSM)的思考

有限状态机(finite state machine)是一个数学概念,如果把它运用于程序中,可以发挥很大的作用。它是一种协议,用于有限数量的子程序(“状态”)的发展变化。每个子程序进行一些处理并选择下一种状态(通常取决于下一段输入)。有限状态机(FSM)可以用作程序的控制结构。FSM对于那些基于输入的在几个不同的可选动作中进行循环的程序尤其合适。

  在游戏中涉及到状态状态切换的时候,可以尝试使用这种机制,如人物的动作,AI行为等等。有限状态机确保了每个状态在切换的时的安全性,在状态切换时可以进行一些其他的处理操作。 当然也有人认为有限状态机时代已经终结,如这篇文章:http://www.cppblog.com/woaidongmao/archive/2009/10/31/99892.aspx

ATF加载时间测试(IOS)

最近在优化项目的资源文件atf加载上传时间,在iPhone上做了一点测试,数据共享下! atf_upload_test   说明: 整图—整张640x1136的图,直接转的atf(命令参考:png2atf -c p -q 0 -n 0,0  -i a.png -o a.atf) 拆分成4个:即把整图分别拆分为512x1024、128x1024、512x112和128x112这个尺寸的小图。 硬件环境:iPhone4/4s/5 软件环境:FB4.7+airsdk14+Starling1.4 从上面表中可以看出在iPhone4上基本近3s的时间(我记得去年在iPhone4上测试640x960的整图也基本是这个时间,看来air+starling改进很多的样子)。目前iPhone4的用户比例大约6%(朋友提供的,数据不权威,真实情况会有浮动),WWDC2014刚刚开完,iPhone6再过一段时间也要发布了,相信iPhone4用户比例在新机发布后会更进一步降低,当然如果那个iPhone4用户依然还不愿换手机的话,那么我想你也别指望让他给你的游戏付费了。总之,目前的开发标准应该瞄准iPhone4s,确保在iPhone4s上运行流畅即可,至于iPhone4,呵呵,不崩溃就行了! 关于安卓,一直以来,安卓的atf上传时间都要比iPhone快一些,atf品质也好一些,搞的定iPhone就不用担心安卓了! 在PC,加载相应png格式资源,整图需200+毫秒,而拆分后的,反倒需要400+毫秒。

使用ANT脚本导出发布版SWF(AIRSDK14)

使用ant脚本可以很方便的构建发布自己的项目,尤其是对于多语言多平台的版本,人工发布即费时,又容易漏掉东西,这些工作就交给脚本吧,机器就擅长干这个! 网上的关于ant的资料更多是用flex的sdk,但是现在移动开发一般都是在FB4.7里用的airsdk,经博主尝试以后,基本做法是一样的,ant的安装就不赘述了,自行搜索即可。下面就贴出相关代码:   build.xml如下: [codesyntax lang=”actionscript3”]

<compiler.library-path dir=”${FLEX_HOME}/frameworks” append=”true”>


</compiler.library-path>
24

    <delete dir="${APP\_OUTPUT\_PATH}/generated"/>
    <delete>
        <fileset dir="${APP\_OUTPUT\_PATH}" includes="${APP\_NAME}.swf.cache"/>
    </delete>

[/codesyntax] 建的测试项目是 testant,相关路径设定需要根据实际情况调整 调用ant脚本,使用FB继承的ant,也很方便,不过博主发现,在控制台打印信息时,中文会乱码,暂时还没有找到解决方法,另外一种就是通过bat批处理来直接调用。 bat脚本如下:

call ant -f build.xml swf

一行脚本即可搞定,build.xml 后跟的swf是xml文件里的target名,建议保存成bat文件,方便使用!

Read More

File移动平台目录位置总结

在移动开发时,我们往往会疑惑该用File的哪个目录来进行文件存储和访问等,今天特意总结一下: 这是Adobe官方给出的Andriod和IOS平台的目录信息:

平台

目录类型

典型的文件系统位置

Android

应用程序

/data/data/

应用程序存储

/data/data/air.applicationID/filename/Local Store

缓存

/data/data/applicationID/cache

桌面

/mnt/sdcard

文档

/mnt/sdcard

临时

/data/data/applicationID/cache/FlashTmp.randomString

用户

/mnt/sdcard

iOS

应用程序

/var/mobile/Applications/uid/filename.app

应用程序存储

/var/mobile/Applications/uid/Library/Application Support/applicationID/Local Store

缓存

/var/mobile/Applications/uid/Library/Caches

桌面

不可访问

文档

/var/mobile/Applications/uid/Documents

临时

/private/var/mobile/Applications/uid/tmp/FlashTmpNNN

用户

不可访问

  以下是File个静态目录在Android和IOS上的情况:

Android

iOS

File.applicationDirectory

通过 URL 只读(非本机路径)

只读

File.applicationStorageDirectory

可用

可用

File.cacheDirectory

可用

可用

File.desktopDirectory

SDCard 的根目录

不可用

File.documentsDirectory

SDCard 的根目录

可用

File.userDirectory

SDCard 的根目录

不可用

File.createTempDirectory()

可用

可用

File.createTempFile()

可用

可用

  友情提示:博主一直用的File.documentsDirectory,非常好用! 延伸阅读:http://help.adobe.com/zh\_CN/as3/dev/WS5b3ccc516d4fbf351e63e3d118666ade46-7fe4.html

网盘搭建svn心得

使用SVN保存自己的项目代码,还是很方便的,可惜现在的svn空间要么收费,要么免费但项目开源! 最近看到一种用网盘搭建svn的方法,正好阿里云也到期了,不由动心一试! 具体方法: 1.SVN的客户端相信都有,现在需要安装SVN的服务器端,(推荐VisualSVN,小巧简单) 2.安装一个网盘客户端(360、百度、QQ微云等,什么网盘都可以),将VisualSVN的仓库目录设置为网盘的同步目录! OK,搞定了 ,就这么简单! 原理:平时我们上传svn文件,只是通过网络上传到svn服务器,现在把本机作为一个svn的服务器,提交svn只是相当于把文件从一个目录复制到另一个目录,速度也快了很多;网盘的作用是把svn服务器的代码仓库上传到网盘服务器,这样即使在其他电脑上,只要把网盘里的文件同步下来,同样可以用svn,对于单个人来用,还是非常方便的!