【问题标题】:How to read data from shape/graphics object如何从形状/图形对象中读取数据
【发布时间】:2010-12-22 15:31:14
【问题描述】:

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

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

【问题讨论】:

  • 也许您可以扩展您想要实现的目标?你画什么样的形状?最终你只需要在你的角色和形状之间做一个命中测试吗?

标签: actionscript-3 flash back


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      问候

      【讨论】:

        【解决方案4】:

        您不能实例化或子类化 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;

        【讨论】:

        • 谢谢,但只有在我使用脚本进行绘图时才有效。为了做到这一点,我需要知道这些点在哪里。问题是它如何轻松地在脚本中记下我可以访问(获取位置)的很多点。
        猜你喜欢
        • 1970-01-01
        • 2012-07-27
        • 2011-11-16
        • 2018-05-29
        • 1970-01-01
        • 2022-12-09
        • 2018-04-17
        • 1970-01-01
        • 2019-09-11
        相关资源
        最近更新 更多