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

Actionscript 3 如何从形状/图形对象读取数据,actionscript-3,flash,back,Actionscript 3,Flash,Back,我想知道是否可以使用actionscript 3在flash中获取存储在形状/图形对象中的数据 在我的项目中,我希望能够绘制一个形状,然后将该形状中的所有点读入我的脚本。这样做的原因是,我需要从这些点生成线,稍后可以使用这些线来检查我的角色速度是否与其中任何一个相交。一旦绘制了形状信息,您就无法读取它。但是,如果您正在绘制形状信息,则可以在绘制时存储该信息,并在以后使用。一旦绘制形状信息,就无法读取它。但是如果您正在绘制它,您可以在绘制时存储信息,然后在以后使用。好的,看起来不可能,糟糕的是 我

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


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

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

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

好的,看起来不可能,糟糕的是

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

是否有可能在flash中以某种方式使图形对象过载,以便在我绘制某些东西时将其记录下来?还是flash IDE没有使用图形绘图api


认为

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

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

是否有可能在flash中以某种方式使图形对象过载,以便在我绘制某些东西时将其记录下来?还是flash IDE没有使用图形绘图api


关于

您不能实例化或子类化图形类。但您可以使用自己的自定义图形类。现在,无论何时,只要你想画一些东西,你就可以使用自定义图形。var cg:CustomGraphics=新的customgraphicsomedisplacyObject.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;
  }
}
cg.moveTo0,0; cg.0,0,10,200; ... a:数组=重心动作;

您不能实例化图形类或将其子类化。但您可以使用自己的自定义图形类。现在,无论何时,只要你想画一些东西,你就可以使用自定义图形。var cg:CustomGraphics=新的customgraphicsomedisplacyObject.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;
  }
}
cg.moveTo0,0; cg.0,0,10,200; ... a:数组=重心动作; 您可以读取形状的所有部分

Flash Player 11.6和AIR 3.6增加了新功能:

flash.display.Graphics.readGraphicsData

例如:

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

你可以阅读形状的所有部分

Flash Player 11.6和AIR 3.6增加了新功能:

flash.display.Graphics.readGraphicsData

例如:

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


也许你可以详细说明你想要实现的目标?你画的是什么形状?最终,你只需要在你的角色和形状之间做一个命中测试吗?看这里:也许你可以扩展你想要达到的目标?你画的是什么形状?最终,你只需要在你的角色和形状之间做一个命中测试吗?请看这里:谢谢,但这只有在我使用脚本绘制的情况下才能起作用。为了做到这一点,我需要知道点在哪里。问题是它如何轻松地写下许多我可以访问的点,以获得脚本中的位置。谢谢,但这只有在我使用脚本绘制时才能起作用。为了做到这一点,我需要知道点在哪里。问题是它如何轻松地写下我可以访问的许多点,以获得脚本中的位置。