3

1 つの画像からパターン形状を作成するフラッシュ ファイルを作成する必要があります。読み込まれたドラッグ可能なムービークリップを反射またはミラーリングする必要があります。ステージ上でムービークリップを移動およびドラッグすると、反射/ミラーが更新されます。

私が遭遇した:http://active.tutsplus.com/freebies/actionscript-30-classes/dynamic-reflection-generator-class-for-as3/ これは、私が求めているものと非常によく似ています。デモは問題ないようですが、コメントにあるように、特にドラッグする画像が大きくなり始めると、ドラッグに多くの減速とラグがあります.

かなりの質問をして申し訳ありませんが、私は完全な解決策を求めているわけではありません。まず、それが可能かどうか、そしてどのようにそれを達成できるかを知る必要がありますか?

次の画像が説明に役立つことを願っています。

ステージ 1: ここに示すように、ユーザー パターン イメージをステージにロードします。

http://www.tiltworld.co.uk/yhfus6fh/pattern_1.png

ステージ 2: 反射をどのように機能させたいかを示します - パターンの両側の 4 つのブロックで:

.../pattern_2.png

(最後に pattern_2.png があるだけの上記と同じリンク)

ステージ 3: ユーザーがステージ上でパターンをドラッグした場所に反射を適応させる。画像のように、反射は元のムービークリップの上/横に直接取り付けられるのではなく、両側の 4 つのブロック内で発生します。

..../pattern_3.png

(最後に pattern_3.png があるだけで上記の 2 と同じリンク)

ローレン :)

ps 以下の現在のコードは、現在ステージ 1 を示しています - fileReference.load を使用してパターンをステージにロードし、次に startDrag を使用してステージ上でドラッグする方法。

// Create FileReference.
var draggableMC:FileReference;

// Create Loader to hold image content
var draggable_mc_loader:Loader = new Loader();
var draggable_mc_content:Sprite = new Sprite();

// Select Button Function.
select_btn.addEventListener(MouseEvent.CLICK, onselect_btnClicked);

function onselect_btnClicked(event:MouseEvent):void {
draggableMC=new FileReference();
draggableMC.addEventListener(Event.SELECT, onFileSelected);
var imageTypeFilter:FileFilter = new FileFilter("JPG/PNG Files","*.jpeg; *.jpg;*.gif;*.png");
draggableMC.browse([imageTypeFilter]);
}

// File Selected Function.
function onFileSelected(event:Event):void {
draggableMC.addEventListener(Event.COMPLETE, onFileLoaded);
draggableMC.load();
}

// File Loaded Function.
function onFileLoaded(event:Event):void {
var fileReference:FileReference=event.target as FileReference;

var data:ByteArray=fileReference["data"];
var movieClipLoader:Loader=new Loader();
movieClipLoader.loadBytes(data);
movieClipLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onMovieClipLoaderComplete);

draggableMC.removeEventListener(Event.COMPLETE, onFileLoaded);
}

// Load Image onto Stage Function.
function onMovieClipLoaderComplete(event:Event):void {
var loadedContent:DisplayObject=event.target.content;
draggable_mc_loader =event.target.loader as Loader;
draggable_mc_loader.x=10;
draggable_mc_loader.y=10;
draggable_mc_content.buttonMode=true;
draggable_mc_content.addChild(draggable_mc_loader);
addChild(draggable_mc_content);
}

// Drag
draggable_mc_content.addEventListener(MouseEvent.MOUSE_DOWN, drag);
stage.addEventListener(MouseEvent.MOUSE_UP, drop);

function drag(event:Event):void {
draggable_mc_content.startDrag();
}
function drop(event:Event):void {
draggable_mc_content.stopDrag();
}
4

1 に答える 1

0

はい、これは完全に実行できます。彼のコンポーネントを使用してみましたか。リンクしたコンポーネントにアタッチされた fla のコードを見ると、彼はそれを MouseMove で更新していますが、これは理想的ではありません。単一のフレーム ループで複数の移動イベントをディスパッチできます (デフォルトのフレーム レートは 24 なので、1/24 ごとにフレーム ループが発生し、MouseMove に基づく更新が不必要に高速になります)。オブジェクトがクリックされた後、10 秒ごとに刻むタイマーをオンにするように単純に調整された場合 (マウスを押した後、マウスを離すか、ロールアウトするとオフになります)、すべてのマウス移動イベントに対してそれを実行しようとするのではなく、パフォーマンスを大幅に向上させます。さらに、彼はコードにかなりの非効率性を持っています。彼が述べたように、何らかのタスク用に最適化する必要がある場合は、無料で公開してから最適化してください。彼のコードの他のいくつかの非効率性は、コンストラクターにプルされる可能性のあるメソッド呼び出し内のオブジェクトの作成と、あなたの例ではこれらが必要ではないように見えるフィルターの使用です。AS3 の最適化に関するこの記事を偶然見つけたので、Jason Sturges のプロフィールを調べてみました。レンダリング ベクトル以外に、AS3 の主要なパフォーマンス ヒッターは何ですか?

于 2012-05-28T03:24:24.003 に答える