快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
      map.put(new Integer(i), inter);       }     }   }   catch (InterruptedException e) {     System.err.println ("image processing interrupted");   } }

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

时间:2011-08-31 IBM

变化是生活的调剂品

尽管在清单 1 中使用了具体的颜色值(即红色是 200,绿色是 0,蓝色是 0 ),但是我们可以容易地改进代码,让它支持颜色范围。使用颜色范围降低了在 绘图程序中使用的颜色选择的精度,因而更容易创建路径图像。

使用更多的颜色使我们可以定义更多状态,还可以描述更复杂的行为。例如, 可以使用 RGB 方案中的不同颜色段创建重叠的控制路径。如果上述每一种状态都 是由一种颜色的不同深浅而不是由不同颜色编码的,那么三个独立的控制路径可 以彼此重叠。当然,使用一种颜色的不同深浅使得区分不同行为的细微颜色差别 变得困难了。大多数图像编辑程序可显示出所选像素的准确颜色值,这使这个问 题没那么严重了。

还可以定义三个以上的控制路径。如果通过一个位掩码(bitmask)访问每一 个颜色值,那么将只受图像格式的位数限制(通常是 24,如果使用 alpha 值则 为 32)。使用精确的位的路径比使用颜色段的路径更复杂,但是这是可以做到的 。您需要有一个可以合并各个图像控制路径的程序或者使用一个图像并在上面添 加绘制。如果不需要支持重叠的路径(即在一个位置上有多种状态),那么在一个 位置上可以有 2^24(或者 2^32)种状态。还可混合这两种方法。例如,通过位 掩码使用红色段,而用绿色段和蓝色段表示其他状态。

图 4 显示了我们的逃生模拟所使用的完整控制路径。注意多种颜色的使用, 以及如何用颜色表示不同位置上的不同行为。

图 4. 完整的控制路径

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

图 5 局部放大了控制路径以看得更清楚。

图 5. 控制路径局部细节

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

逃生!

在定义了状态映射后,就可以开始在 2D 空间中移动对象了。这个示例逃生应 用程序让可移动对象成为 Entity 类的实例。定义了两个主要子类: Person 和 Alarm 。 Person 可以移动,而 Alarm 是静止的。清单 2 定义了 Entity 接口 。

清单 2. Entity 接口

interface Entity {   void addToPanel(JPanel panel, boolean shared);      void updateTick(); }

addToPanel() 方法创建一个或者多个 Swing 组件来表示对象并将它们添加到 所提供的面板中,这些组件一般是带有图标集的 JLabel 。面板通常是 2D 空间 的实现。它的背景显示动画背景。

updateTick() 方法使对象在动画的每一周期活动。 Alarm 对象改变它们的颜 色以创建闪烁的效果。 Person 对象则移动。

Java?壓屈略強鮫嶄聞喘児噐夕?議揃抄(5)

扮寂:2011-08-31 IBM

Alarm 斤?頁酒汽議描妨斤??凪糞?泌賠汽 3 侭幣。

賠汽 3. Alarm.updateTick: 描妨

public void updateTick() {   if (++tick % CYCLE == 0) {      opaque = !opaque;   } }

Person 斤?曳 Alarm 鹸墫。万断冽彭協吶議陣崙揃抄卞強?泌賠汽 4 侭幣 。

賠汽 4. Person.updateTick: 冽彭揃抄卞強

/** Move one step along the path */ public synchronized void updateTick() {   tick++;   Integer tock = stops.get(new Integer(tick));   if (tock != null) {  // adjust startTime if requested     startTick = tick + tock.intValue();   }    if (tick < startTick) return;  // not my time yet   if (isAtExit()) return;   // Process individual movement    Point2D location = getPosition();   int x = (int)location.getX ();   int y = (int)location.getY();   switch (manager.stateAt(x, y

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号