Sprite Sheet Editor修剪每帧中的空白区域的原理说明

source on github

Sprite Sheet Editor 0.5.0版本中,我加入了我加入了修剪空白的功能。这个功能将每帧图像的上下左右的空白全部清空,然后再将所有清空了空白的帧绘制在一张大的sheet上,从而使最终sheet文件尺寸尽可能的小。

但是,对于动画来说,所有帧的尺寸应该是统一的,这样才能实现正确对位。所以,一个完整的动作的帧的大小,应该以这个动作所有帧的有效像素的外延来确定。

看看这张图,就清楚了: 继续阅读 »

Vim多行匹配以及排除字符串

source on github

一个很简单的需求,在下面的XML文件中匹配 <frame> 块。

一开始写了一个:

^\s\+<frame>\_[^\(frame\)]*< \/frame>
</frame>

这样能达到需求,但是却是凑巧。

因为 [^\(frame\)] 其实并不会匹配一个frame字符串,它依然是将组中的字符串单独对待的。如果在<frame>块之间包含frame中的任何一个字符串,那么匹配就会失败。

凑巧的是,正好在下面的范例中,并没有出现这样的情况。

既然有问题,那么就修改下,最终的版本是这样的: 继续阅读 »

让svn将非标准扩展名识别为文本文件

为了方便分类,我经常会自定义文本文件的扩展名。比如json代表JSON格式的文本,md代表markdown格式的文本等等。这些文件都是纯文本文件,但svn在默认情况下,会将其识别成为二进制(bin)文件。

这样,在文件合并等操作时,就会出现问题。

用一句代码可以解决这个问题:

svn ps svn:mime-type text/plain *.md

处理完毕后,需要提交一次修改到服务器。

将当前目录下的所有as文件加入缓冲区列表

vim的缓冲区列表(buffer list)保存着打开过的文件集合。使用 :b filename 可以快速打开需要的文件,且支持文件名自动补全,为编辑提供方便。

如果所有源文件都加入到缓冲区列表中,在编辑源码的时候不就更方便了么?

使用 :badd 命令可以将一个文件加入到缓冲区,我写了3个函数来提供批量加入和文件搜索的功能:

  • GetFileList返回提供的路径(和子目录)下的所有as文件的列表;
  • EchoBaddList将提供的路径(和子目录)下的所有as文件输出成Vim支持的添加缓冲区列表语句,并输出到当前缓冲区中;使用这个函数,可以方便的编辑自己的Session文件;
  • BaddList则直接将提供的路径(和子目录)下的所有as文件加入到缓冲区列表。
    继续阅读 »

设置Vim的errorformat以支持mxmlc编译器

vim_emf1

Vim调用Ant编译swf并自动调试一文中,我介绍了使用Vim来编译swf的方法,这半年来,我一直都用Vim+Ant+FlexSDK做AS开发,感觉总体效率上比Flash Builder要高许多。

不好的地方,其实也有许多。最大的不便就是没有代码提示,对于不熟悉的方法,必须要去查看Language Reference。还有个附带的不便就是必须自己手动导入包。不过这两个不便之处,又让我远离了Flash Builder中的哪些错误的代码提示(我被误导过好多次),以及让我更熟悉AS3的包结构。

今天说的不是这些,好了,进入正题把!

在Vim中,有许多为程序员着想的地方。比如碰到编译错误后会自动打开第一个出错的文件并跳转到出错行。改完这个错误后可以用 :cn 命令跳转到下一个出错处继续修改。这个特性降低了程序员在调试过程中对鼠标的依赖,提高了效率。 继续阅读 »

手表的防水等级说明

water_resistance

在购买手表的时候,“30米防水”、“50米防水”、“100米防水”这些都代表什么?100米防水的手表能戴着游泳么?能潜水么?

手表上标注的防水深度,其实都是指静态防水。而在水中运动的时候,手表承受的压力是远远超过静态检测时的情况。同时,随着时间的流逝,手表受到汗液的腐蚀和灰尘的侵蚀,密封性能也会收到影响。因此,如果希望在游泳的时候也戴表的话,尽量还是买防水200米以上的比较靠谱。

下面这张图讲得很清楚: 继续阅读 »

编辑Sprite Sheet的小工具:sprite sheet editor v0.5.6发布

2011-08-23:v0.5.6版发布

  1. 加入缩小帧原始尺寸的功能;
  2. 删除帧后,会立即更新Sheet预览;
  3. 解决一些bug。

所有帧的原始尺寸是一个很有用的功能,例子:

一个角色的动作是由多帧组成的,为了配合占用最大空间的那一帧,每一帧中都会有一些多余的空白。虽然可以使用“修剪空白”功能来删除这些空白,但这只能降低保存的文件的大小。
在讲角色载入到程序中的时候,空白依然是会占用内存空间的。
使用缩小帧原始尺寸这个功能,就能将每个动作中的所有帧的原始外边框尽量变小(当然是人工操作),以节省内存空间。

更多的功能介绍以及软件下载,看这里

编辑Sprite Sheet的小工具:sprite sheet editor v0.5.0发布

2011-08-18:v0.5.0版发布,同时更名为Sprite Sheet Editor

  1. 采用Flex重写了界面;
  2. 修改了生成Sheet的流程;
  3. 自动计算生成的Sheet的尺寸,自动计算支持“正方形”和“2的幂”;
  4. 可更改已生成的Sheet的尺寸和排列方式;
  5. 增加对Sheet中的帧周围空白区域的自动修剪;
  6. 可以采用可视化的方式修改截取区域;
  7. 可以对待拼合的图像文件进行排序;
  8. SpriteSheetMetadata格式小幅修改。

更多的功能介绍以及软件下载,看这里

flashplayer crash on Netstream.play()

Thank smithfox translation,中文版

This is not a 100% frequency bug, I spent 3 days to debug it and I’m not sure I can duplicate it again.

case:

Connect to FMS Server using NetStream, once invoke method NetStream.play(‘streamName’), the flash player will crash.

all of flash player release have the same issue: single,debug,plugin

The bug will appear if satisfy the conditions below, ((but not all)

  1. Win7 OS
  2. Play RTMP stream. RTMP stream can be published by Flash Media Server(FMS) or Red5. In other words, playing local flv/f4v/mp4 video have not this problem
  3. the Stream contains audio
  4. Use Frame meta to pre-load. if you do not understand Frame pre-load, see this article: Preloaders in AS3;
  5. After complete pre-load, call ‘removeChild’ to remove the pre-loaded instance of the class (BUG here).

Development and testing platform (appear BUG)

  1. Flex SDK 4.5.1
  2. Flash Media Server 4.0
  3. Flash Player 10.3
  4. Windows 7
  5. Chrome12/Opera11.5/Firefox5/IE9

继续阅读 »

FlashPlayer/AIR在new Vector(-1)的时候崩溃

ADL错误

source on github

试试这段代码:

?View Code ACTIONSCRIPT
var __length:int = -1;
var __v:Vector.<string> = new Vector.</string><string>(__length);
</string>

如果你用Flash builder编译,不会显示任何错误。编译后的swf无法双击打开,或打开后立即退出。

如果你用编译的是AIR程序,程序运行后会立即崩溃,同时弹出下面的提示信息: 继续阅读 »