actionscript 3を使用して、シェイプ/グラフィックスオブジェクトに格納されているデータをフラッシュで取得できるかどうか疑問に思っていますか?
私のプロジェクトでは、図形を描画してから、その図形のすべてのポイントをスクリプトに読み込むことができるようにしたいと思います。その理由は、後でキャラクターの速度がそれらのいずれかと交差するかどうかを確認するために使用できるポイントからラインを生成する必要があるためです。
actionscript 3を使用して、シェイプ/グラフィックスオブジェクトに格納されているデータをフラッシュで取得できるかどうか疑問に思っていますか?
私のプロジェクトでは、図形を描画してから、その図形のすべてのポイントをスクリプトに読み込むことができるようにしたいと思います。その理由は、後でキャラクターの速度がそれらのいずれかと交差するかどうかを確認するために使用できるポイントからラインを生成する必要があるためです。
Shape のすべての部分を読み取ることができます。
Flash Player 11.6 および AIR 3.6 に追加された新機能:
flash.display.Grapics.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 を更新する必要があります
一度描画された形状情報を読み取ることはできません。ただし、描画している場合は、描画時の情報自体を保存して、後で使用できます。
OK、それでは不可能のように見えますが、悪いことです。
私は2Dトップダウンレーシングゲームをやっていて、トラックの壁に沿ってラインを生成し、thouseラインに対してプレーヤーの速度をチェックしたいと思いました。そうすれば、衝突するラインの法線の周りでプレイヤーの速度を反射し、壁に跳ね返らせることで、基本的な衝突応答を実装できます。実際の線なしで同じタイプの衝突動作を取得する方法について、誰か良いアイデアがありますか?
グラフィックスオブジェクトをフラッシュでオーバーロードして、何かを描いたときにそれが記録されるようにすることは可能ですか?または、フラッシュIDEはグラフィックス描画APIを使用しませんか?
よろしく
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;