fishfray's profile鱿鱼的海洋HDMIBlogListsGuestbookMore Tools Help

Blog


    关于开发规范的几个问题.

    ====关于包的命名方法====
    举例说明:
    microsoft公司的oa项目util模块的包命名方式:com.microsoft.oa.util
    apach组织的database项目xml模块的包命名方式:org.apach.database.xml

    ====关于类名的命名方法====
    一般为帕斯卡命名法,即每一个逻辑断点都有一个大写字母来标记.比如:BXmlElement,AnimeEngine,XmlPullParser等等

    ====关于方法名的命名方法====
    其他是驼峰命名法,即一般为帕斯卡命名法,即函数名中的除第一个单词字首用小写外,每一个逻辑断点都有一个大写字母来标记.
    比如:
    public String getAttributeName(int index)
    public BXmlElement getChildrenElement(int index)
    public boolean markSupported()

    ====关于常量的命名方法====
    常量一般用全大写,普通变量名一般用小写.这个非强制要求

    ====关于注释的相关写法====
    一般每个重要的方法建议用/**/写注释.每个类也需要写注释写明此类的目的和作者/商业公司名(author@company),如果需要的话,建议写入每次更新的相关时间和更新信息.一般添加或者修改非类原作者修改的方法,需要在方法的注释中写明更新作者的名字.

     

    开发思路相关

    关于如何理顺别人代码的思路,并且在不破坏别人代码的情况下,加入新的功能。
    最近的一些时间,编程思路受到部分冲击,嘛,其实已经算是完全不同的思路的撞击了=w=对我来说当然是一件好事,越多了解,越能进步,不过适应起来确实还不太习惯。不过已经有好几周了,已经算是渐渐习惯了。
    罗列以下几点,给个人留个备份:
    1.对于一些代码,因为接触的人比较多,尽量不修改原有的流程,在没有相关文档,和注释的情况下,在尚未90%理解所要流程的每个细节,每句的意思的时候,尽量不要动原有代码。
    2.因为不能保证代码是否完全正确,因此在相应的环境中,注释掉部分写好的代码,为以后更改的人留下痕迹,是一个好习惯。
    3.尽量不要改变代码的流程,尽量不要增加代码的解析分支,尽量通过扩展类完成相关的功能,在极少量改变别人的代码的情况下,通过新的扩展类来处理自己的问题。这样虽然会导致类的增多,但是就结构上来说,会更加好控制和维护。(前提是控制好归类)
    4.架构不能变,结构尽量不变,原有类少加代码,新添加类尽量代码整齐。
    5.在没有一个全局变量公共类的情况下,确定功能归属于某个类是需要debug调试来层层跟一下类的功能才能确定的。
     
    在更新接近Version0.6的ikaEngine的时候,我也思考过如何让人理解整套体系和架构的问题,如果只是框架+TOOLS的话,那不能叫做Engine,而我目前做的功能貌似也的确只是框架+一大堆控件+一些工具而已。而看国外一些引擎,也完全两极化了,要不然就是低级接口封装,要不然就是直接脚本控制,而对于我来说,这些脚本控制不是我想要的,而低级接口的封装的话,我根本不需要费那么大的劲,只要几个Util类就OK了。方向应该哪个方向,也许只有都试试才知道吧。
    -------
    废话这么多,其实是因为花费了N久时间,终于把IkaEngine从项目开发中完全独立出来了。算是一个check point了。而对现有的代码的结构化,估计是下个阶段要做的事情。而如何将其和正在构思的浏览器中使用,将是下一步的目标。也许春节这个完整的时间,如果真的闲的无聊的话,也许可以尝试下极限开发了。

    关于不需要安装JRE就能支持直接运行JAVA程序的问题。

    关于某人问fishfray我的:不需要安装JRE就能支持直接运行JAVA程序的问题。
    其实针对这个问题,没有太多必要的说明,从根本上来说JAVA文件运行基于的lib其实也是由exe和dll文件组成的,而为了方便运行,直接安装JRE,然后再运行是一个就下载时间和下载大小来说很好的选择。因此从根本上来说脱离JRE是不可能的。而从侧面避免安装JRE却是有可能的,其实方法只有也仅有一个。把JRE打包进程序里面-w-
    。。。。
    喂喂,别扔食物。  凸=_,=凸鄙视扔食物的。
    其实这里所说的JRE并非JRE全部,而是根据程序定制的JRE,可以删除很多自己不需要的东西,只保留程序运行所需。因此可以说节约了很多的空间的。如果你的程序够大还好,那就不是很明显的=w=如果你的程序就几K的话,加上一个10M左右的精简版JRE那的确不小了-w-
     
    下面说解决方案,2种。任君选择:
    (1)。用MinGW。其实MinGW这个工具简单地说是打包容易-。-一行代码搞定。安装方法也很简单,去http://sourceforge.net/projects/mingw/ 下载Automated MinGW Installer,然后安装时候选择java +maker,然后再使用的时候在cmd上一行代码搞定
    gcj --main=simple simple.java回车
    =w=万事OK,什么?出错了?对了,这东西不能解析中文(有时候中文注释也出错),另外貌似还不支持javax系列(java扩展包,非javaSE核心包)=w=什么ImageIO之类的您还是别用了吧。。=w=b(好吧。。觉得不爽的可以用下面的方法)。
     
    (2)。然后就是exe4j了,这东西貌似用的人很多,东西是很不错,不过。。。大家都用盗版的我也就不说啥了-w-  去CSDN下破解版吧-w-
    这个东西好的一点就是下载安装后一路next就能运行。不过默认的话就需要原有机器安装过JRE才行。因此要注意一些配置问题,主要的就是class path里面加入需要的包,包括主要运行的和调用的,注意用绝对路径。还有一个就是configure search sequence里面默认的三个要删除,然后把JRE copy到当前文件夹中,然后用绝对路径可以到达的地方,选择directory,路径加入。
    然后一路next试试=w=,不信的话卸载了你的JAVA试试(好吧。我承认我试过了- -)。可以直接用绝对路径调用运行了-w- 除了包大点,其实也没啥。
     
    关于精简版JRE的东西我不多说,google搜索:精简版 JRE,下载下来看看,比我废话说的再多也有效,剩下的就看大家的程序用的接口是不是够多了- -
    啥?你问效率问题么?好吧,其实我个人感觉运行程序速度差不多。
    关于其他方式,还有不少=w=我个人觉得以上2种应该够用了,如果还有别的问题,给我QQ或者MSN或者blog留言好了- -
     

    关于zayit.exe遇到问题需要关闭。

    关于eclipse+WTK or SEWTK用debug模式出现关于zayit.exe遇到问题需要关闭的问题。。看来看网上,貌似完全没啥有用的消息。OTZ。
    最后在看到某个找不到zayitlib.dll文件的帖子,尝试不成功的时候,才想了想试了试。。结果:问题解决,debug正常使用。
     
    网上有很多人出现的人,很多人归为RPWT。也有不少人更换eclipse版本。也都没有用= =。。。其实。。。不需要更换eclipse的,个人的感觉是:
    (1)。eclispeME的问题,我原来的是eclispeME1.7.6会出现zayit.exe的问题,升级到1.7.9,如果需要的话,不确定,把program files里面的viceAge文件夹的DLL copy到相关使用的WTK的lib/bin文件夹,然后结果是可以使用。
    目前结果是:eclipse3.3.0+eclispeME1.7.9.
    (2)。如果有时候可用,有时候不可用的话,清理一下workspace,也就是的把workspace中的.metadata文件全删除,这样进入eclipse后,重新导入所有工程,这时候debug模式也可以正常使用。
     
    目前个人碰到的问题基本上以上2点可以解决。正常使用=。=
    全模式可用。顺便关了几个长久没用的插件=。=继续工作
    -------
    昨天和fay吃饭,原本lori也说去的=。=结果加班了。OTZ。不过还好,吃的是握寿司。味道还不错2人一共116,自助餐类型的。。吃得还不错。
    lori他们的网游上线,《帝国》这款游戏非常好,peter Team的邮件很早的就收到了,游戏很强大,如果免流量费的话,说实话我真的很想玩- -果真对手机上网有心理障碍了。
    fay的轩辕剑第三章也出了...我貌似第一章还没打通呢。OTZ.
    -------
    公司终于成立了梦网2.0团队。说实话,其实心里很兴奋。但是我是否有能力和整个团队一起做好这个下一代的移动梦网。。说实话,我自己心里都没底。OTZ。。
    继续工作去了。其他组做的"百合"终于上线了。看新闻的话效果还不错。而我们的隶属于"百合"的"莲蓬"啥时候上线呢=w=说来谁起的这些名字。OTZ,百合时代。。天啊。(我承认我想到奇怪的地方去了。OTZ),
    -----
    做了一段日子的网页解析显示,现在终于搞定了一个阶段性的目标..剩下的估计是处理其他bug和调整代码结构的问题了。。高兴=w=
    收到电话,回家写工作总结。

    Gphone G1,简单感觉

    今天拿到了公司的G1,GOOGLE的Adroid操作系统的第一台手机,感觉还不错。简单感觉一下,没有太大的惊喜,速度很快,功能很丰富,可惜都需要上网,如果移动流量能包月的话估计会爽死。线路图,真实地图都很好用。

    因为我的Adroid SDK是老版本,不知道新版本是否支持连接手机端的DEBUG模式,所以暂时还不能说啥。。

    放图好了。

    顺便发现live更新了。。貌似效果很不错=w=以后再多试试好了。

     

    antenna的一些用法

    以下是一些自己碰到的问题,特写在这里,防止忘记。
    关于找不到路径的一些处理。
    问题错误信息:[taskdef] Could not load definitions from resource antenna.properties. It could not be found.
    处理方法,有时候eclipse不能正确寻找路径的时候要自己指定路径:
     <taskdef resource="antenna.properties">
      <classpath location="D:\eclipse\antenna-bin-1.1.0-beta.jar" />  <!-- 这句就是添加的内容 -->
     </taskdef>
    ====================
    关于在eclipse添加其他的包(myapi.jar)的时候,做法如下:
    wtkbuild模块:
    <wtkbuild srcdir="${dir.output.dist}" destdir="${dir.output.classes}" debug="${wtk.debug}" >
    改成:
    <wtkbuild srcdir="${dir.src}" destdir="${dir.output.classes}" debug="${wtk.debug}"  classpath="${basedir}\mylib\myapi.jar">
     
    wtkpackage模块:
                    <wtkpackage jarfile="${dir.output.deployed}\${jar.filename}.jar"
                            jadfile="${dir.output.deployed}\${jad.filename}.jad"
                            obfuscate="${wtk.obfuscate}" preverify="true"
                            keepManifestOrder="true">
                            <fileset dir="${dir.output.classes}" />
                    </wtkpackage>
    改为:
           <wtkpackage jarfile="${dir.output.deployed}\${jar.filename}.jar"
                            jadfile="${dir.output.deployed}\${jad.filename}.jad"
                            obfuscate="${wtk.obfuscate}" preverify="true"
                            keepManifestOrder="true"  libclasspath="${basedir}\mylib\myapi.jar">
                            <fileset dir="${dir.output.classes}" />
                    </wtkpackage>
     
    以上完成。可以打包插入包了。

    关于push和安全模型,以及J2ME程序自动升级。

    关于push和安全模型。。
    其实push对我来说就是用一个短信启动一个已经安装于手机端的程序。原先根本没有想过如此的用法,不过实际上这种方式可以让J2ME程序通过短信启动的。可以说是很不错的方式。
     
    另外一个就是安全模型了。。。这个在V8上体现的及其明显,对于作用域和信任程度是要花钱买来才能知道的。。因此,很好很强大,手机厂商真厉害。。如此而已
     
    关于在线自动升级的方法,以前我曾经告诉过人,手机程序不能自己升级的,是不能再J2ME程序中升级自己本身的程序。但可以通过间接方式自己升级的。
    方法很简单,只要一句
    boolean flag=midlet.platformRequest(HTTP://XXXXX/JAD地址);
    然后退出程序即可。
    其实流程也很简单: 通过网络监测新版本-->程序提示是否更新-->确认是的话运行上面那句,然后退出程序--> 自动联网读取JAD文件,然后让你确认下载安装-->确认安装,更新,升级成功。。
    如此而已=。=  通过手机内置的浏览器作为一个中介完成新的JAD安装。如此完成升级。

    看了2天的php

    看了2天的php,我无语了。。。。
    果真对于初学者来说,我买错书了。配置上有不少问题,书上不解释。。完全靠自己+网上的帖子自己摸索出来了。。
    看第一第二章就感觉有点问题。(例子都是错的,我说运行半天都不行,最后自己乱改才能用),然后我郁闷了,代码完全乱来的,生成的东西看不懂。
    仅仅一个数据库连接那几句就浪费了我2天时间绝大多数是不知道自己错在哪里的错。。
    我看来如果真的打算看的话,还是从基本教程看起吧。什么典型案例之类的书我以后还是少碰为妙。

    《星际争霸2》引擎技术部分解析

    画面优化给CPU带来考验
    就在SIGGRAPH大会刚结束之后,AMD和暴雪在AMD官方网站上放出了《星际争霸II》的官方技术文档,通过游戏引擎技术的展示让星际迷们感受到越来越多的惊喜。
          着色方面,在使用原型的基础上利用3D StudioMAX让程序员对整体效果做最大的优化,反复的提炼使得整个作品就像被艺术家精心雕琢一样,配合上8000个独特的、不重复的线性着色渲染代码,使得Starcraft II与早期的游戏代码相比增加了N倍。
            在游戏制作初期,暴雪就认识到GPU的强大性能,因此在设计的时候就采用了以GPU为主的优化和大幅度图像质量增加。
    由于使用大量像素渲染操作,如果在游戏中当你选择了控制成百上千的zerglings或者marines等作战单位集体行动,势必造成CPU超负荷,即便是强大的GPU这也是一个考验。
    大量的视觉特效(Based Effects)
    大量的视觉特效(Based Effects)
          包括FP16 HDR、光线散射/反射效果(Diffuse and specular for lighting)、景深效果(depthof field)、体积雾(fog volumes)、动态环境遮蔽(dynamic ambientocclusion)、智能贴图置换(smart displacement)等等,这些都是Starcraft II的“BT”之处。
            然而,作为一个即时战略游戏,暴雪依然在“故事情节”的设定上下足了功夫,在游戏引擎的影响下,延迟缓冲器的深度和平均值,包括着色组建都完全为了效果而服务。而照明管道和阴影的利用也让深景效果等一些特效表现得淋漓尽致。不过,这些特效都还在讨论中。

    图形引擎 重中之重
    在早期的开发过程中,图形引擎也作为一个重点中的重点进行设计:
            可扩展性第一
          对于游戏引擎来说,一个主要的设计目标是扩展的引擎。暴雪的游戏质量是人所共知的,不光是他们的能力,更重要的是经验,从以前的一系列游戏开发经验来说,整个游戏各种族之间能力的平衡问题非常重要,而且图像效果之间的兼容性也必须考虑到,这样也是为了各种不同平台硬件之间搭配的玩家都能体验这个游戏的魅力所在,以确保游戏有足够的竞争力,因而从ATI Radeon 9800/NVIDIA GeForce FXs系列到ATI RadeonHD 4800s和NVIDIA GeForce G200s都可以轻松的进行游戏。
            相比之下,GPU的负载才是重点,像素着色单元往往会因为大量的单位同时出现而使得GPU难以承受,顶点着色单元的运用也必须合理,而先进的GPU才能体验到最大限度的特效,而对于普通的GPU只能尽量减少使用率来保证游戏的流畅度。
            一个引擎,两个“世界”(Dual Nature of the Engine)
    这个双重性质的引擎使得整个游戏有更完美的体验,其实就是说SC2具有两个视角模式,一个是普通的RTS视角、一个是单人模式的RPG视角,当然在这两个模式下呈现的画面效果是有所不同的。具备两个视觉模式的原因正是我们之前提到的故事模式,当切换到单人模式的RPG视角时,玩家将会体验到暴雪对于整个游戏设定的精妙之处,通过一系列互动,包括对话等手段,其实从某种感觉上来说更像是第一人称射击游戏(FPS)。

    各种效果设定
    暴雪还将对这些不同的设定做更为细致的讨论,这样才能让玩家体验到不同的技术效果的运用。
            屏幕基础效果
            作为StarcraftII的另一个设计目标,照明环境模式让游戏的互动更多,之前在魔兽争霸三中,每个单位有一个硬性限制,有多少亮度,可能会影响它在任何特定时间。出于这个原因,使用动态照明是相当微不足道的,但是在StarcraftII中每个单位有一个照明设备,当其中一个开启之后其他也会开启,这样效果非常好,但是由此带来的地图的设计和绘制,包括地图地形切片就成了相当复杂的问题。而即便是解决了这些,给GPU带来的负荷也是巨大的。
            针对于此,暴雪也做了很多限定 :
            ◆ 颜色组成部分,并不受当地照明,如发射、环境地图和点燃前期的彩色组成部分;
            ◆ 深度;
            ◆ 每像素正常;
            ◆ 如果使用静止环境闭塞,出口的环境闭塞的纹理被忽略,如果屏幕空间环境闭塞启用;
            ◆ 亮灯的弥漫物质的颜色;

            
    ◆ 亮灯的镜面材料的颜色。
    解码缓冲器
            所有的缓冲器应该都使用相同的深度,不幸的是似乎这些缓冲器远远不能满足暴雪的需要,这些缓冲器以24字节每像素推动输出带宽,这样使得整个带宽明显不足,因此在安置光源的时候必须牺牲一些。

            为了向MRTs提供每像素值以保证用于各种的效果,因而以下必不可少:
            ◆ 深度值为照明、雾卷、动态环境闭塞和智能景深,预测,边缘检测和厚度测量;
            ◆ 平均值为动态环境闭塞;
            ◆ 弥漫性及镜面照明。

            延迟渲染

            在StarcraftII中延迟渲染只适用与当前的渲染,包括灯光的点和散射出去的面都要再渲染,但是由于游戏中会出现很多的照明设备,如果都使用这样的方法渲染的话一定会造成画面过于缓慢,因此延迟缓冲器的出现也解决了这一难题。在延迟渲染和着色方程式的帮助下计算机能很快的绘制出不同形式或者更为复杂的光源,这样也为其他的计算提供了一个后处理的过程。
            像素坐标重建
            受益于早期的样板,暴雪在设计新的形状和色彩的时候轻松了不少,而且同时还释放了CPU。
          相机原理我们都知道了,就通过这样的模式使得暴雪在视觉上更了解该如何设计。
    屏幕空间环境光遮蔽
    屏幕空间环境光遮蔽
            屏幕空间环境光遮蔽(Space Ambient Occlusion,简称SSAO)。如果对这个名词感到陌生,那提及到让大家记忆犹深的《Crysis》逼真的光照效果时,一切就很简单了,这就是SSAO技术的独到之处。
            暴雪在这使用这方案的时候考虑到了整个空间的效果和质感,也许从某写方面上来看,没这个必要,但是基于暴雪的理念,一点点瑕疵都是不被允许的。
            在任何可见的点和表面在屏幕上,采取多个样本(8至32),这些样本,表现了在三维空间中从目前的点计算,到预计回屏幕空间所需的时间和深度。
            现在的目的是检查是否深入采样点,如果接近这个更远的采样点本身能获取信息的话就这么做下去,这是一个函数问题,因此需要复杂的计算。
            不过在对地图的计算时不会采用这样的方法,这仅仅是为了形成一个空间的效果而已。

    模糊效果 自我闭塞 边缘处理
    模糊效果
            前面的一切都是为了更加细致的描绘出所有的场景,但是,有时候游戏还是需要一些模糊的图形图像,如果一直使用SSAO技术的话,必然导致不真实。
            对于SSAO来说,虽然是一种优势,但是高智能的判断在这时也显得尤为重要,何时需要高精度的细致图像,何时需要动态模糊效果,无论是着色还是渲染都需要大量的资源的计算才能显现这些复杂的效果。
            自我闭塞
    这也是一个相当复杂的效果,就像一个围绕着一个半球体产生偏移向量,这一点上在屏幕上(这意味着需要使用大量的延迟缓冲器),由一个矩阵转化每个偏移向量和正常向量来抵销矢量。
            边缘处理
            偏移向量在空间中并不像在屏幕空间中一样,由于镜头的不断移动使得SSAO不断变化,这样就需要在移动的过程中对镜头的边缘进行处理,以保证完美的视觉效果,但是纹处理包装上并不是一件简单的事。

    SSAO效果
    SSAO的表现
            SSAO提供的效果是让人相当满意的,视觉图像质量的处理近乎完美,但是成本过高,而且大量使用还是会造成系统性能瓶颈,这样得不偿失,因此合理的使用这个技术也是讨论的问题之一。
            SSAO和整体光线效果
            从图中很明显的发现了SSAO的精妙之处,如此逼真的效果让人赞叹不已,其实更多的还是其后面的技术支撑。


    制约因素使用过程
    我们可以把一切制约因素一起使用以下过程表示:
            ◆为每个像素在源的形象和存储执行一个全屏幕通过计算混乱循环结果,在Alpha通道的每边缩减一个CoC图像缓冲区的四分之一大小;
            ◆产生中等模糊图像通过应用的RGB高斯模糊与每个样本对源图像加权CoC;
            ◆产生的最大模糊图像只有缩小的RGB的图像缓冲区源图像的四分之一,每一个CoC和大型模糊缓冲器可以同时使用不同的通道;
            ◆最高模糊图像与RGB样本加权由缩减CoC执行,Alpha通道中载有CoC,也有模糊,但其样本不加权本身;
            ◆缩小和模糊一张深度地图成为一个缩减深度图像,重用深入SSAO缩减(SSAO不模糊深度 );
            ◆然后开始最后的景深着色,有一定的形象来源,中等和大型模糊、模糊CoC的形象,非模糊深入地图和缩减深入形象的渲染。
            景深渲染包括:
            ◇计算小模糊价值,直接使用小样本着色四近邻像素;
            ◇计算CoC的像素(缩减CoC将不匹配);
            ◇样本非模糊,使用模糊的深入比较——计算机CoC,如果是模糊的深入,比非模糊的深入更远,否则使用CoC价值样本,模糊CoC的形象;
            ◇计算贡献,从每一个可能的模糊图象,计算小模糊的颜色,中型和大型的图像模糊的基础上,CoC的因素;
            ◇小型,中型和大型模糊;
            ◇输出Alpha包括的源(无模糊)形象。



    透明物体渲染 半透明阴影 光过滤处理器
    处理透明物体渲染
          透明度是一个值得深入研究的问题,当涉及到开发时暴雪的董事会认为延迟渲染技术不支持透明度的话就应该在其他地方加上这个功能,而事实证明这是一个正确的选择。
            作为是典型的就是延迟绘制技术,透明度的问题还设计到树荫等一系列问题,因此必须选择一些有代表性的物体来标记之后再做探讨。光线的问题在透明度的谈论中再一次被提及,因为这是个相辅相成的东西,因此暴雪在制作这一切的时候都努力的寻找解决方案。
            半透明阴影(Translucent Shadows)
            这种技术能令烟雾、爆炸也能投射出阴影效果。
            早期在建模的时候影子系统都是成功地利用屏幕空间信息解决跟踪问题,否则将会困难很多,但这次暴雪将显示如何延长阴影地图的每像素信息与一些额外的信息通道,可以用来容易的充实阴影,地图上实现半透明的阴影支持。
          阴影地图算法是延长与第二地图的阴影信息形成半透明的阴影,大部分地图的影子仍然会包含不透明信息的阴影,此外还需要做到在颜色的缓冲区发现颜色半透明的阴影。不过,这一切都需要硬件的支持,如果硬件不支持将会有一个空的颜色,因此在考虑到深景等特效的时候暴雪依然在处理阴影效果。
            首先是清理,以白色调和,然后填补渲染透明物体的阴影,就这样形成一个透明的阴影色彩缓冲区,再加上测试,处理这些透明光过滤器,最后形成需要的效果。
            光过滤处理器
    总结:
          从上面简短的一份官方技术文档(因为AMD只放出这一部分),我们已经可以了解到暴雪在SC2这个游戏上所付出的努力和贡献了,其效果之华丽恐怕也是惊人的。作为暴雪十多年磨一剑的大作,《星际争霸II》可是包含了现在最尖端的技术和效果,无论是暴雪的质量还是技术相信都是世界顶级的水平,这样的游戏公司确实在为自己的的作品留芳百世而努力!不过,至于还要等多久,至今仍是一个谜。

    练手:广州地铁票价查询

    练手:广州地铁票价查询
    原因:女友某日说需要这种软件。
    结果:今晚花了1个多小时完成这个小软件。别指望我还有心情去美观这东西。

    分析:软件逻辑本身十分钟就写完了。最麻烦的是建立那个价格表。因为这个价格不是公式算出来的,而是根据实际地铁站点之间的距离算出来的,所以只能建立价格表格才行。。。但是网上没有制作好的文档表格,所以不得不自己做表格。网站地图缩小后看不清,所以也要自己做图这些花费了不少时间。

    理论上全机型适应(MIDP1.0,导航键不能用的用2,4,6,8也能控制方向)。切换地图的时候可能载入需要几秒钟(图不小),大概就是这样。

    下载地址:
    http://www.comicfishing.com/_fish/gzmtr_price.rar

    本身是没什么难度的东西,东西实用是最重要的。。。。
    与其绚丽多彩的外观空有外壳,不如实实在在的快速做功能。毕竟是非商业的东西。
    程序也是如此,人也如此。

    ------------------

    风云决很好很强大,绝对是近几年来中国最好的动画电影,没有之一。
    美版360很好很强大,只能玩英文+全区游戏。不能玩中文+日文游戏。。昏倒
    鲁鲁修很强大,剧情实在是忽悠的很。看得我吐槽不能。
    渔场很强大。走了近5年了,人还真的不少。
    手机很强大。android,塞班,WM,J2ME移动软件都很强大。
    keroro很强大。200多集了还在不停的演。
    东方很强大,天上地下无所不能巫女无敌。
    E3很强大,FF13跨了平台一个消息后PS3价格立刻降了,360价格立刻升了。
    中国股票很强大,俯X撑来回忽悠钱。
    中国青菜很强大,几个月1.5一斤就涨到4块钱一斤了。
    奥运很强大。中国的盛世。
    所有的一切都很强大。

    <天劫online>全部图片资源

    <天劫online>是我近期才见到的一个非常赞的游戏,特别是像素图看起来无论是颜色还是设计都是我很喜欢的类型,所以把图片资源解出来,特别向大家推荐一下。版权是空中猛犸的哦。大家看一下就好。
     

    从Jbuilder X到eclipse 3.3....

    时代在发展,科技在进步,如今乡间小路都变成了高速公路。偶的IDE在很多很多一群一群一堆一堆的朋友的簇拥下,再加上前一段的新闻的攻略下。。好吧= =我今天把家里的电脑换IDE平台了。。

    从Jbuilder X到eclipse 3.3。。各方面其实过渡的感觉都很平稳,晚上专门花费了点时间将eclipse 的颜色,格式,界面调整了一下。差不多算是实现了平稳过渡。而且调成了一些深色调,为了防止眼睛劳累。界面也大体上模仿了JbuilderX以前写程序的界面。也顺手调整了一些以前在Jbuilder没有注意的细节。 其它也就没有什么了。整体平台过渡应该算是98%吧。写点东西还算顺手。明天把公司的平台也调整一下好了。。

    JbuiderX偶编程一直用的界面。。 

    eclipse3.3的调整后的界面,以后我将在这个界面下工作。。

    周末杂事

    自从上周入手入手<JAVA编程思想第四版>第四版到先在已经有一周了。目前进度大概是看了20%左右,大多是上周二到周五看的。
    上周五公司活动,去打羽毛球,2个部门的人一共打了7场,我一个人胜了2场>.<,我们技术部以4:3胜市场和产品部,yeah~(虽然实际上最会打羽毛球的2个人打单场去了= =剩下的都是不会打的在比赛)结果市场部的经理请吃饭=v=边吃饭边看刘翔的跑步~又是第一
    周末女友学校报到,帮她搬家到广外研究生宿舍。- -3人间,还有空调。现在的学生生活真好啊=_=。事隔一年多没有进过大学城半步,如今大学城环境已经很不错了。我自己的电脑也终于从家里的客厅搬回到卧室了T_T,可喜可贺。昨天在广外,看着那一群一群的学生,不知不觉的感慨自己已经老了。和以前大学时候认识的朋友见面。以前大一大二的人现在都大四了=_=我真的老了啊。。。OTL...都本命年了。我的豆蔻年华回来啊(泪)盈月2香港那次因为某些原因没有去成,所以香港的要在广州处理了。圆通快递还是一如既往的无耻+无赖。打电话放了我2次鸽子;下次改用申通快递好了。
    周六偶然知道了halo2最后几关的游戏方法,所以把halo2通关了。9月25日XBOX360版的halo 3发售。以前halo1和halo2都是玩PC的,希望下次能够玩到XB360版的吧。 仙剑4之后RPG游戏自然沉寂了一段时间,周末晚上也玩了玩上次在购书中心买到的空之轨迹SC。只玩了一点点。估计今年能打完就不错了=v=。慢慢来吧。
    毕竟人生除了工作赚钱,技术学习外,生活也是很重要的=v=好不容易周末好不容易休息,换换脑子出去玩玩后再回来工作才能劳逸结合嘛。
    前几天在BBS偶然看到了脚本编译器就是下面这个:
    Snake脚本编译器,功能还不错。
    http://antigalaxy.spaces.live.com/
    没想到作者竟然是摩网的=v=b 难道是我去moabc那里见到过的某人?
    这东西和CoCoMo的新版本脚本editor撞车了啊=_,=不过还好。继续潜水观望。。
     

    关于中byte[]与String互相转换时候的中文的处理问题。

    今天公司的一个同事问我一个乱码的问题,本来是很小的问题,却让我弄了半个小时都没有弄完。这里严重鄙视一下自己已经生锈的脑袋,最近要转动一下了。其实问题很简单,就是本地把String转化为byte[]然后发送给服务器,然后服务器再把byte[]发给别的客户端,然后别的客户端把byte[] 转化为String。
    但是无论发送,接受到的都是乱码,然后查询了发送端的byte[],服务器端,和接受端的byte[]都没有问题。但是为啥发送后就是乱码呢?然后抛开服务器和接受端的问题。本机String转Byte[] 后再转换回String竟然也乱码。。。这囧坏了我了。因此拿了台测试机回家测试。
    结果回家不到15分钟就解决了。。OTL,竟然是我自己疏忽了一个小地方导致的很大的问题。。
    现在贴一下独立出来的程序模型。
    ---------------------------------------
        try {
          TXT = "章鱼烧";
          dx = TXT.getBytes();
          TXT1 = new String(dx);
          TXT2 = new String(dx, "ISO-8859-1");
          TXT3 = new String(dx, "UTF-8");
          TXT4 = new String(dx, "GB2312");
        }
        catch (UnsupportedEncodingException ex) {
        }
    打印结果是:

    这个就是原来程序的错误,无论用什么编码new出来的String都不是中文。后来注意到最前面的getBytes的编码问题
        try {
          TXT = "章鱼烧";
          dx = TXT.getBytes("UTF-8");//唯一修改的地方
          TXT1 = new String(dx);
          TXT2 = new String(dx, "ISO-8859-1");
          TXT3 = new String(dx, "UTF-8");
          TXT4 = new String(dx, "GB2312");
        }
        catch (UnsupportedEncodingException ex) {
        }
    打印结果:

    以上在NOKIA 7610上测试通过,也说明了7610的默认encoding是ISO-8859-1,看来关于中文的处理看来要多加注意才行。否则就会犯这种不小心出现的错误。
     

    辛劳+平稳的生活

    辛劳+平稳的生活。上周日去一个朋友家玩WII,果真wii要一群人玩才有意思。。。WII上最好玩的果真还是WII sports,和朋友2个人玩高尔夫,保龄球,网游,都很赞~不过也真累。。特别是玩铁锤高达的时候,手都酸透了。结果昨天和今天手臂都酸痛。。囧。。果真我还是适合用鼠标键盘手柄玩游戏啊。WII太消耗体力了。。顺便贴本人的WII形象一个=v=

    上周五公司的人一起去唱K,偶不会唱,所以就不停止的吃自助餐,然后唱过后就直接开车去山上了。不幸的是我被分配给要坐一个刚会开车的人的车T V T,路上果真心惊胆战,最后还要开车上山,半高不高的悬崖上,下面就是湖。OTL...心里那个叫祈祷啊。。早知道我去开也会比她开车好点啊,虽说偶也很久没开了,但也不会比她差。OTL。
    在山里吃完饭,然后回家的路上坐另外一个人的车= =。在仅仅比车宽不到1米的崎岖山道上那家伙竟然开车开到80公里!然后还说,不是他的车,他自己的福特可以速度再高,...OTL..我心惊胆战啊。总之上次山下次山,偶对开车的理解能力又有了提高。。我还是乖乖回老家的时候练车好了。

    来新公司工作了一个月了=v=人也算混熟悉了,也稳定下来了,工作强度中等中有点敢时间,但是工作起来很顺手所以自然也没有什么问题,随手拍照2张留念。

    偶的工作证,不厚道的打码。。

    在公司里面看到的车。。OTL..囧啊。。

    脚本的一些思考

    继续昨天的话题,昨天因为那个程序员和那个策划之间对脚本定义的态度不同,所以想弄清楚相关的东西,所以才有下面写的文章:
    关于脚本本身的定义:
    脚本script是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。脚本通常可以由应用程序临时调用并执行。
    ------
    由上面可以理解到,其实脚本就是可以调用执行的文件。这个可以说是脚本的一个广泛的定义。动态程序一般有两种实现,一是二进制方式,也就是编译成,exe或者其他文件去执行的。另外一种就是脚本方式。通过调用一个文件脚本去解释执行的。通过这点来看昨天那2个人说的都是脚本,但是他们所说的脚本的内容有不同。 忽然在网上发现了这样的话:
    脚本同我们平时使用的VB、C语言的区别主要是:
    1、脚本语法比较简单,比较容易掌握;
    2、脚本与应用程序密切相关,所以包括相对应用程序自身的功能;
    3、脚本一般不具备通用性,所能处理的问题范围有限。
    -------------------
    看了上面的解释,也许就清楚了。其实所谓的脚本,本身也就是和VB,C一样的语言,只是简单点局限点而已。而ASP、PHP、CGI、JSP这些都是脚本语言,也就是说,制作网页这些其实是在写脚本,也算编程的~也是写程序的,而非策划的工作咯?这个方面可能越说越麻烦,总之简单地说:写脚本也是在编程!
    两个简单的例子,对比LUA和java:
    1.打印"hello world"的实现。
    LUA实现:
    print"hello .world"
    JAVA实现:
    System.out.print("hello .world");
    2.实现计数器:
    LUA实现:
    function create_a_counter()
        local count = 0
        return function()
            count = count + 1
            return count
        end
    end
    JAVA实现:
    int count=0;
    public void create_a_counter(){
    count=count+1;
    }
    ----------------
    当然如果这样看来.脚本的确也就是编程嘛。这样其实看不出太多脚本的优点来,和编程没有两样。
    但是很多可扩展性的游戏制作中,脚本的用途就比较大了,比如说魔兽世界中的用的LUA脚本,暴雪针对自己的游戏专门出了基于LUA的脚本系统,这样就可以让很多人(大多数是程序员)来自己定义界面系统,而不需要看机器内部的代码就OK。不需要编译(有的会用专门的软件简化和转换脚本),直接就可以运行。因此我的看法就是:脚本就是可以不经过对程序部分再编译就能够运行的寄宿于某种计算机语言的语言。
    继续返回到最开始的问题,策划需要的脚本是什么?程序需要的脚本是什么?
    说清楚这个问题直接贴一些策划和我的聊天记录就OK
    首先是策划的话:
    -_- 脚本多复杂?莫非是需要用到程序定义语句的那种?策划不见得要懂程序,这是自己想偷懒的不负责借口啊,所谓脚本,那是简化了格式后交给程序接口解释的一种机制。象这种程度的如果策划能写大可以把程序开除掉节省开支。他为什么对策划的理解这么偏激。随便给策划的工作难度抬高门槛是要不得的。真想提高合作效率就该给别人提供些方便,策划能理解能写的话还要他这程序干啥…就是我,也只能做到提供好工具了才能开始做事。连工具都要我自己解决的话,真不如把程序开掉。=_,= 生化4的工具就是那样的,随改随生效。
    可以看一下某日本游戏的脚本:
    ---------------------------
    // 画面白
    EF 0 1 1
    GW 0
    //ウインドウ文字位置設定
    WI 0 64 24 28
    WI 1 156 32 23
    WI 2 156 336 23
    WS 1 0
    WS 2 0
    FI 1 24 0
    FI 2 24 296
    // 顔ロード 顔管理番号0に顔0(シオン)をロード
    GF 0 0
    // 顔ロード 顔管理番号1に顔3(秋葉)をロード
    GF 1 3
    // 顔ロード 顔管理番号2に顔7(志貴)をロード
    GF 2 7
    // BGロード
    GB 42
    // BGM
    BP 0
    // 60フレームかけてホワイトイン
    EF 0 0 60
    --------------------------
    下面是程序的原话:
    网游就是策划要写脚本,本来就是让策划用的,本来策划就要懂程序。  V2.0最重要的是实现了微指令,最终的目标是程序根本不知道跑在自己身上的是什么游戏 。我这个是宿主语言寄宿在J2ME上,如果用C++些个解释器,就能跑在C++上。
    下面是那个策划的脚本,很长,就贴部分
     VARIABLE {
        //misc
        $process = 0;
        $db_select = 0;
        $item_select = 0;
        $sameword = 0; //1: 没什么变化
        $come_from = 0;
        $curscene = 0;
        $menustate = 0;
        $menupause = 0;
        $menucontinue = 0;
        $random = 0;
    .....
    /** @todo --------场景7--------- */
      SCRIPT Scene7_UnLoad {
        UnLoadScript(SCRIPT.Scene7_切屏);
        UnLoadScript(SCRIPT.Scene7_换背面);
        UnLoadScript(SCRIPT.Scene7_楼梯);
        UnLoadScript(SCRIPT.Scene7_楼梯口);
        UnLoadScript(SCRIPT.Scene7_旋转电脑);
        UnLoadScript(SCRIPT.Scene7_增减压电脑);
        UnLoadScript(SCRIPT.Scene7_植物);
      }
      /** @todo --------场景8 Out--------- */
      SCRIPT Out_UnLoad {
        UnLoadScript(SCRIPT.Out_切屏);
        UnLoadScript(SCRIPT.Out_司令塔);
        UnLoadScript(SCRIPT.Out_返回舱);
      }
    .......
      SCRIPT Scene4_修理台 {
        Attach($db_select);
        OpenDialogBox(1, "修理台");
        Detach();
        if ($db_select == 1) { //选择使用
          call(SCRIPT.OpenItemBox);
        }
        if($scene4_repair_att == 0 && $db_select == 0) {
          ShowMessage(2, "专门用来修理电子设备的固定台");
          return;
        }
    ........
      //上面没有东西并且拥有修理器
        if($scene4_repair_att == 0 && $item_repair == 1 && $db_select == 1 && $item_select == 15) {
          UseItem(15);
          LoadMiniGameScene(2);
          LoadGameScene(4, true);
          SetPlayerShow(true);
          call(SCRIPT.Scene4_ChangeActor);
          ShowMessage(2, "物品修理完毕");
          SetValue($scene4_repair_att, 16);
          return;
        }
     /** @todo --------植物--------- */
      SCRIPT Scene1_植物 {
        Attach($db_select);
        OpenDialogBox(1, "植物");
        Detach();
        if($scene1_grass_att == 0 && $db_select == 0) {
          ShowMessage(2, "植物中有隐藏有东西");
          GetItem(13);
          ShowMessage(3, "数码相机");
          SetValue($scene1_grass_att, 1);
          return;
        }
        if($scene1_grass_att == 1 && $db_select == 0) {
          ShowMessage(2, "一盆植物");
          return;
        }
        if ($db_select == 1 && $item_select != -1) {
          SetValue($sameword, 1);
          call(SCRIPT.SameWord);
          return;
        }
      }
    }
    =====================
    两个同为脚本,却代表了2种脚本的使用方式,截然不同啊.一个实现了定义结构简单明了,另外一个实现了定义和简单逻辑。但是复杂度高了非常多。孰优孰劣不好说。。。不过游戏开发者真正需要的是哪种脚本呢?(最后也没有定论,拖出去打。。。。)
     

    程序员和策划之间对于脚本的期望差异。


    下午和一个程序设计不错的人还有一个策划分别聊了聊。说到脚本。策划和程序的看法截然不同。
    看了那个程序的脚本,功能很强大,差不多相当于手机上的lua了,写一个那个脚本几乎相当于写了同样多的程序了。把脚本给那个策划看,策划却说,如果策划能写这种脚本的话,那要训练这个策划多久,而且如果策划写这种脚本的话,还不如直接写程序了。然后拿出了他正在做的日本游戏的脚本给我看。。的确,脚本简洁明了。但是功能并不强大。有兴趣的我又去查了一下欧美的一些游戏,很多游戏都是用日本游戏的那种脚本方式的,但是也有一些是用LUA这种的,相比来说,日本游戏的那种脚本方式用的人多些。。
    可能不是一件大事。但是却让我有了兴趣。也许这个程序写的脚本已经不是基于游戏来说的脚本了,而是基于J2ME这个平台的脚本,也正因为这样。针对的用户群可能并不是策划,而是程序员了。但是程序员的话,又可以直接用J2ME去写,那么这个脚本的意义就是简化程序的劳动了,但是其实,策划要经过程序的手来实现这个游戏世界的话,那么其实流程和原来一样,那么这个脚本是否还具有原先那么多的意义呢?真正使用LUA的我想程序要比策划多的多吧。
    因为以前自己写过一个基于脚本的游戏,是类似我说的日式游戏的那种脚本。这段时间打算尝试一下用那个程序员的脚本写点东西。。。亲身体验一下,到底这种脚本的好处在哪里。。
    今天关注的自然是GT5P的截图。。。。

    >.< 真的。。真的很有感觉的。。其它GT5P的图片可以点击我的相册观看。。
    http://www.j2medev.com/blog/user1/21650/cmd.html?uid=21650&do=album
     

    《游戏创造》7月号有偶关于J2ME游戏AI的文章

    周五的时候偶然查看邮箱发现自己的邮箱里面有印刷品,拿回来一看是7月的游戏创造。翻了翻,是样刊,里面有偶的文章。呵呵~第一次在《游戏创造》上刊登自己的文章>.<虽然和别人比起来写的并不是多好,而且自己的文章自己觉得都有点古怪。不过还是心理暗爽一下=v=+yeah~

    微笑

     

    yeah~John Carmack demonstrates ID Tech 5 at WWDC 2007

    John Carmack demonstrates ID Tech 5 at WWDC 2007
    昨天,ID卡马克在WWDC 2007的演讲和展示,ID Tech 5新引擎的展示.
    http://www.youtube.com/watch?v=HvuTtrkVtns

    自从Doom3以后,卡马克销声匿迹了很久了...新的技术也一直没有出现在大家面前.cry引擎风头正劲,虚幻3引擎现在也先声夺人,HL2引擎也稳步发展,本以为卡马克已经将成为游戏引擎的历史的时候,终于带着ID Tech 5引擎出现了.
    就技术上来说,感觉上就是DOOM3引擎的DX9(或者DX10)版..
    引用新闻的话:
    ----------以下是转贴----
    id Software全新的3D引擎和CG渲染技术几乎去掉了所有束缚游戏艺术家们和设计者的障碍,并且提供了独一无二的游戏世界像素级的定制功能,忠实的呈现了极端真实的视觉效果。新引擎还提供了一系列的强大设计工具套件,可以大大的方便和加速游戏制作的进程。id Tech 5将会使游戏拥有广阔的室外场景,同时室内环境的艺术细节也将进化到前所未有的地步。
       
        另据C引擎的制作者卡马克介绍,新引擎id Tech 5除了可以对应Mac系统以外,同样可以完美支持PC、X360以及PS3等多平台的游戏开发工作,可以说是真正符合次世代要求的游戏开发引擎。
    ------以上是转贴------

    从中可以看出,其实新引擎不再过分追求技术攀比的高峰,也不像某些引擎用特效来充门面,新引擎感觉最重要的一点,还是多平台开发,降低开发成本,提高效率. 这点其实正是很多公司投资者所需要的.同样的游戏,即使效果再好,对于投资人来说也不如开发周期减少50%以上的游戏赚.

    一个优秀的游戏引擎的效果就是这样,降低游戏开发成本.增加艺术家和设计者的可操作的范围,将游戏的控制权尽量完美的传递给艺术家和设计者.估计以后引擎的争夺除了展现效果方面,也将在下面几个地方竞争了:多平台,简单实用,降低整体成本,减少开发周期.
    果真作为游戏制作商,不赚钱是不行的阿...游戏制作商不是慈善机构.降低成本,提高质量.深度探索游戏性.才能生存.
    ====================
    以下是腹黑话:我说老卡阿.家里蹲了这么多年,也不好好工作,就拿了一个DOOM3的DX9版本就想出来忽悠钱?该不会那时候1周写了个手机游戏,赚了100多万刀后,改行赚手机游戏的钱了吧XD.
    ====================
    渔场BBS升级基本上完毕了...虽然美感和原来相比大不足....= =慢慢来好了..我承认我没有设计天份..
    而且我的要做的事情多到我都想堕落.前天刚在群里面看到了某国内精英游戏设计师的言论,笑到我肚子痛,昨天则已经到了想吐的境界了(没胃口,吃饭吃几口的吐了).果真精神不好也会身体不好么...难道是我真的要颓废了么...我觉得我还是应该辞职休息一段时间了....
    没有干劲,没有激情,没有目标...有呆下去的必要么?..连我自己也被传染了..= =预计下周或者下下周辞职....
    blue的网页一拖再拖,就做了个主界面和分页面而已..很多东西都还没有完成..同人物整理拖了3,4天了,东西占领了我的床,我也没有心情整理.TB店的东西也都没整理,A*扩展算法的文章也一直没有时间写.<游戏创造>的AI概述的文章的图1周了还没有给砒霜...
    为啥...我会这么多事情这么多麻烦事情..OTL....我要死了..
     
    to Archlich :
    blue那边顺利的话就过去..
     
    to char:
    搬家后欢迎来玩...

    关于手机播放声音的一些实际做法

      关于手机播放声音的一些实际做法.
      上次(忘记什么时候了)说过了声音播放的状态转化的问题,这次牵涉一些实际的问题.
      首先是声音播放的问题,很多情况下大家都希望2个声音同时播放,(背景音乐和音效),虽然在实际情况上这样做是有可能的,但是其中还是有很多的问题的,一般来说是先停止一个音乐,然后播放另外一个,然后再播放原来的音乐,但是更多人的做法就是只播放音效或者只播放音乐(好吧..我现在就是属于只播放音效的),
      针对不同的游戏使用不同的选择,现在大概在手机游戏开发领域大多是这样做的.播放声音有的人是一个一个声明,然后一个一个用的,不过就个人来说,还是推荐大家用player数组,  Player[] effect_player,这样的用法,方便适用,虽然有人给我说用Player[]有时候会出现问题,但是实际情况下我还没有碰到过确实是因为创建的是声音数组导致的问题.所以目前我还是用这种方法
      public static final byte sound_beat = 0;
       effect_player = new Player[sound_number];
      effect_player[sound_beat]=Manager.createPlayer("用于创建声音的数据流","audio/X-wav");
      这样的用法是我现在的用法,当然个人推荐是把数据流都打包,这样对于读取速度方面会有一定的提高.
      然后就是声音播放的问题,
      1.很多手机不支持多个声音同时多个缓冲状态.
     也就是说,很多手机不支持多个player同时处于PREFETCHED状态,因此在检测状态的时候尽量避免用PREFETCHED作为判别的标准,建议使用 STARTED状态而避免
      PREFETCHED状态做判别.
      关于声音播放方面,用的方法也很简单,一下是我暂时的用法
       public void play_effect_sound(int soundNo) {
        try {
          if (enablesound == true) {
            effect_player[soundNo].prefetch();//确认进入prefetch状态,
            effect_player[soundNo].start();//确认播放
          }
        }
        catch (MediaException me) {
     System.out.println("effect_player error:"+soundNo);//如果有问题,打印错误的音乐编号
        }
      }
     虽然其实 effect_player[soundNo].prefetch()这步可以说是多于的,因为调用start的话也会先进入PREFETCHED状态再进入STARTED状态,
     但是严格格式来说的话,还是写上好.看每个人的想法了.
    2.关于声音同步的问题
    关于声音同步的问题,有2个思路,如果是按照顺序播放还没有什么,如果是同时播放的话,就有2种根据游戏需要的解决办法了.1是停止当前正在播放的声音,
    然后播放后来的声音,2就是继续播放原来的声音,后来的声音忽略,关于这个问题前几天也问了一下gameloft的神仙桑的解决办法,用的是前者,而我个人习惯上使用后者,只要在调用播放声音的函数上加上
    if (effect_player[soundNo].getState() == effect_player[soundNo].STARTED) {
    return;//如果声音状态正在播放,返回.
    }就OK了.当然如果你播放的声音多于1个的话,也要检测多个player的状态..不过..检测这些不太浪费时间啦.所以一般来说没什么的.
    (当然不排除一些比较特别强调音效节拍的游戏),总的来说声音播放就是player数组.不要用PREFETCHED状态检测判断.
    针对和动作配合的播放声音,暂时的做法是这样的
    public void hero_playBeatSound(int number) {
      if (hero.act_frame == number) {//当前动作帧 == 指定动作帧
        sounder.play_sound(Def.sound_beat);//播放beat的声音.
      }
    }
    我个人是用这种办法来确定精确的在某个动作的某一帧来精确的确定播放时间的.针对不少机型这样做是可以同步的(还有一些奇怪的机型暂时就不说了).