firehill

写诗一样优美的代码

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  2 随笔 :: 0 文章 :: 7 评论 :: 0 引用

公告

置顶随笔 #

摘要: 前段时间看到动作编辑器Sprite更新了,名为Spx2011。加了多图和支持透明像素的功能。可是想不到竟然要收费了,听到这个消息,我心里很是愤慨,忍不住要骂一句:卑鄙。我是个文化人,我所能想到的最脏的词语大抵就是这个词了。 Sprite以前的版本我也用了一两年,感觉还不错(应该是我没用过别的编辑器的缘故吧)。但是一大堆的Bug在里面,我们好像还只能默默的忍受,因为据说作者是个高傲的人。 更早之前有认识另一个做动作编辑器的高手,这是个小心的低调的程序员。有跟他小小的交流动作编辑器这一块。我跟他提到Sprite,他一堆的不屑,说:界面差,代码结构差。后来他有给我看他写的游戏编辑器,给我的感觉就是.阅读全文
posted @ 2011-12-25 14:48 firehill 阅读(1117) 评论(6) 编辑

2011年12月25日 #

    前段时间看到动作编辑器Sprite更新了,名为Spx2011。加了多图和支持透明像素的功能。可是想不到竟然要收费了,听到这个消息,我心里很是愤慨,忍不住要骂一句:卑鄙。我是个文化人,我所能想到的最脏的词语大抵就是这个词了。

   Sprite以前的版本我也用了一两年,感觉还不错(应该是我没用过别的编辑器的缘故吧)。但是一大堆的Bug在里面,我们好像还只能默默的忍受,因为据说作者是个高傲的人。

  更早之前有认识另一个做动作编辑器的高手,这是个小心的低调的程序员。有跟他小小的交流动作编辑器这一块。我跟他提到Sprite,他一堆的不屑,说:界面差,代码结构差。后来他有给我看他写的游戏编辑器,给我的感觉就是惊艳!(截图如下:)

 

    这是个游戏编辑器,他把动作编辑器,地图编辑器等游戏工具整到这一个工具里了。界面很美观!有资源管理器,管理方便;有控制台输出,有打包,编译,甚至有直接运行的功能!这样的编辑器才有资格在市面上拿出来卖钱吧?那些其他的不入流的工具们,麻烦你们把你们那丑陋的头缩回去吧!

    本来我之前已经在写动作编辑器了,主体结构也搭的差不多了,后来看到这个霸气的工具,心里为之一惊,于是把我的工具重新规划修改了一下。加了项目管理,

日志,网络管理几个大的模块,其实也是跟这个差不多,也是要把动作编辑器,地图编辑器等游戏工具整到一起。不过没这么多细的功能。 

    我这个编辑器是我利用空闲时间写出来的,前前后后也就大概两个月左右的时间,用Java写的,才能写的快一些。当然时间仓促,还有很多不足之处,欢迎提出批评指教。(截图如下)

   

  其实动作编辑器也没多复杂的东西在里面,希望大家不要去花那份冤枉钱来买别人写的垃圾工具。有钱的话还是多多支持一下中国正困难中的手游吧。

  后面我会专门拿一个系列来讲这个工具,一步一步为大家揭开动作编辑器这个神秘的面纱。敬请期待。

 

 

   

 

posted @ 2011-12-25 14:48 firehill 阅读(1117) 评论(6) 编辑

2011年12月19日 #

        做过手机游戏(尤其是J2me)的程序员想必对各手机自带的系统字都是深恶痛绝的吧:难看,运行效率低,各个机型还不匹配,移植起来也很麻烦。

       一般情况每个公司都是用图片代替,这样虽然是很美观,但是图片在程序里是很占内存的。尤其是做Rpg的时候,这么多的剧情文字不可能全都做成图片吧!

       后来我研究了一下点阵字库的实现原理,我觉得也可以模仿一下,做个山寨版的点阵字库。

    原理如下:

     1 获得每个字的点阵数据

    把每个字画出来,转成图片,然后获得每个点的颜色信息,这样就知道这个字的点阵数据。(如图1)

     2 把这些点阵数据写到二进制文件里,要用的时候读出这些点阵数据,画字的时候再用画线的方法画出来就行了。

 

        

 

 

 

        (图1)

至于每个字的数据,可以保存点或线的数据。我是保存的线的数据(因为Java里找不到画点的函数,只有画线的,这样做渐变字的时候也很方便,至于说描边,那就要另外再写算法了)   

 

     J2me端的实现:

     每个字一个MyWord对象

      里面就一个属性byte[][] lineData;

    下面是画字函数 也很简单(普通的,没有特效)

    public static void drawWord(Graphics g,MyWord word, int x, int y, int color) {

        if (word == null) {

            return;

        }

        g.setColor(color);

        for (int i = 0; i <word.lineData.length; i++) {

            int index = 0;

            if (word.lineData[i] != null) {

                int len =word.lineData[i].length >> 1;

                for (int j = 0; j < len;j++) {

                    g.drawLine(x +word.lineData[i][index], y, x + word.lineData[i][index + 1], y);

                    index += 2;

                }

            }

            y++;

        }

    }

下面是画渐变字的函数,传了一个渐变颜色的数组进去

  public staticvoid drawWordEffectA(Graphics g, MyWord word, int x, int y, int[] color) {//渐变

        if (word== null) {

           return;

        }

 

        for (inti = 0; i < word.lineData.length; i++) {

            intindex = 0;

           g.setColor(color[i]);

            if(word.lineData[i] != null) {

               int len = word.lineData[i].length >> 1;

               for (int j = 0; j < len; j++) {

 

                   g.drawLine(x + word.lineData[i][index], y, x + word.lineData[i][index +1], y);

                   index += 2;

               }

            }

            y++;

        }

    }

 

OK,总的来说是很简单的一些算法和应用。但是用到游戏里面去,对游戏的整体效果提高了很多。

比较一下点阵字,系统字,图片,这几个方法的优缺点:

 

点阵字

系统字

图片

数据文件大小 

 

跟字的笔画复杂程度成正比,

一般1个字100字节左右,但打包到Jar时会压掉2/3

不会增加Jar的大小

文件很小

占用内存

 

每个字的对象里就一个Byte的二维数组,占用内存小

 不占用内存,每次画的时候还会消耗额外的内存

跟图片的面积成正比,当有很多个字的时候,占用的内存就很恐怖了

运行速度

 

运行速度慢,在N73真机上平均每个字要1毫秒,但丝毫不影响整体运行效果(不知道还有没有优化的方法)

运行速度快,但每次画的时候还会消耗额外的内存

运行速度很快

 

最后总结一下,如果少量的字还是用图片吧,美观省事运行快。

低性能的机子还是不要用这种点阵字库吧。

posted @ 2011-12-19 20:43 firehill 阅读(709) 评论(1) 编辑