1

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

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

4

4 回答 4

6

您可以阅读 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

于 2013-06-07T13:25:27.267 回答
2

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

于 2009-12-03T04:19:59.710 回答
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;

于 2009-12-03T09:39:43.670 回答
0

好吧,看起来那是不可能的,太糟糕了。

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

是否有可能以某种方式重载 Flash 中的图形对象,以便在我绘制某些内容时记录下来?还是flash IDE不使用Graphics绘图api?

问候

于 2009-12-03T07:27:34.027 回答