如何从形状/图形对象中读取数据

时间:2009-12-02 23:59:02

标签: actionscript-3 flash back

我想知道是否可以使用actionscript 3获取存储在flash中的形状/图形对象中的数据?

在我的项目中,我希望能够绘制一个形状,然后将该形状中的所有点读入我的脚本中。原因是我需要从这些点生成线,以后我可以用它来检查我的角色速度是否与它们中的任何一个相交。

4 个答案:

答案 0 :(得分:5)

您可以阅读Shape的所有部分。

新功能已添加到Flash Player 11.6和AIR 3.6:

flash.display.Grapics.readGraphicsData()

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html#readGraphicsData%28%29

示例:

var s :Shape = new Shape();
s.graphics.lineStyle(2, 0xFF0000);
s.graphics.drawCircle(0, 0, 50)

var gd:Vector.<IGraphicsData> = s.graphics.readGraphicsData(false);

var copy_of_s :Shape = new Shape();
copy_of_s.graphics.drawGraphicsData(gd);

addChild(copy_of_s);

要使用新版本,您必须更新playerglobal.swc

http://www.adobe.com/support/flashplayer/downloads.html

答案 1 :(得分:2)

绘制后无法读取形状信息。但是如果你正在绘制它,你可以在绘制自己时存储信息并在以后使用它。

答案 2 :(得分:0)

好的,看起来好像不可能,坏了。

我正在做一个2d自上而下的赛车游戏,我想沿着赛道的墙壁生成线条,并检查玩家对战线的速度。这样我就可以通过反射玩家的速度来实现一些基本的碰撞响应,玩家在它碰撞的线的法线周围速度并使其从墙壁反弹。有没有人对如何在没有实际线条的情况下获得相同类型的碰撞行为有任何好的想法?

是否有可能以某种方式重载闪存中的图形对象,以便在绘制内容时将其记录下来?或者Flash IDE不使用Graphics drawing api?

此致

答案 3 :(得分:0)

您无法实例化或子类Graphics类。但您可以使用自己的自定义图形类。

public class CustomGraphics extends Object{
  private static const CLEAR = -1;
  private static const MOVETO = 0;
  private static const LINETO  = 1;
  ...
  ...
  private var _graphics:Graphics;
  private var _actions:Array;
  public function CustomGraphics(g:Graphics):void {
    _graphics = g;
    _actions = new Array();
  }
  private function recordAction(obj:Object):void {
    if (obj.action == -1) {
      _actions = null;
      _actions = new Array();
      return;
    }
    _actions.push(obj);
  }
  public function moveTo(x:number, y:Number):void {
    g.moveTo(x, y);
    recordAction({action:MOVETO, X:x, Y:y});
  }
  ...
  ...
  public function get actions():Array {
    return _actions;
  }
}
现在,无论何时想要绘制内容,都可以使用CustomGraphics。 var cg:CustomGraphics = new CustomGraphics(someDisplacyObject.graphics); cg.moveTo(0, 0); cg.drawRect(0, 0, 10,, 200); ... a:Array = cg.actions;