快速业务通道

Java:在二维动画中使用基于图像的路径 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
3 所示。

图 3. 使用分层透明度结合起来的图像

Java:在二维动画中使用基于图像的路径 - 编程入门网

Java:在二维动画中使用基于图像的路径(3)

时间:2011-08-31 IBM

让世界充满色彩

生成一个图像后,就可容易地将它转换为所需要的映射。我们只要遍历图像的 颜色并为每种颜色值指定一种行为。比如我们可以使用白色 ——它通常是全为 1 的值——表示无映射或者默认行为。黑色——通常是零值——可以用于表示自定 义的行为。如果是根据我们的图像映射的,当对象遇到一个有同样行为(即同一 种颜色,如黑色)的位置时,它就会继续沿着由这个位置定义的方向运行。如果 这个位置不是同样的行为,那么它就会找到与它有同样行为的相邻位置,但是不 会走回头路。

我们可以用不同的颜色表示其他行为。没有定义的颜色值将会被忽略。因此, 背景中的像素(如 图 3中的浅灰色)会被忽略。

清单 1 显示如何完成映射。先针对特定颜色值扫描该图像,然后用每一个颜 色像素的位置定义该位置在控制状态映射中的控制状态。在逃生的例子中,用不 同的 STATE_xxx 常量定义了六种行为。

清单 1. 处理控制路径图像

Map map = new HashMap();  : public final static int STATE_UNKNOWN = -1; public final static int STATE_NONE = 0; public final static int STATE_HALLWAY = 1; public final static int STATE_INTERSECTION = 2; public final static int STATE_HINT = 3; public final static int STATE_START = 4; public final static int STATE_EXIT = 5;  : /** Process the control image */ void processControl(Image img, int x, int y, int w, int h) {   int pmap[] = new int[w * h];   PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pmap, 0, w);   try {     pg.grabPixels();      if ((pg.getStatus() & ImageObserver.ABORT) != 0) {        System.err.println("image fetch error");     }      else {       Integer none = new Integer(STATE_NONE);        Integer hall = new Integer(STATE_HALLWAY);       Integer start = new Integer(STATE_START);       Integer exit = new Integer(STATE_EXIT);       Integer hint = new Integer (STATE_HINT);       Integer inter = new Integer (STATE_INTERSECTION);       // for each position        for (int i = 0; i < pmap.length; i++) {         int red   = (pmap[i] >> 16) & 0xff;         int green = (pmap[i] >> 8) & 0xff;         int blue = (pmap [i]   ) & 0xff;         if   (red == 255 && green == 255 && blue == 255)            ; // don''t bother to add NONE to map         else if (red == 0 && green == 0 && blue == 0)            map.put(new Integer(i), hall);         else if (red == 0 && green == 255 && blue == 0)            map.put(new Integer(i), start);         else if (red == 200 && green == 0 && blue == 0)            map.put(new Integer(i), exit);         else if (red == 255 && green == 0 && blue == 0)            map.put(new Integer(i), hint);         else if (red == 0 && green == 0 && blue == 255)      

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号