2012-01-08 4 views
0

私の質問です:どのようにコードだけを使用して図形を再描画するのですか?ActionScript 3.0でシェイプを再描画するにはどうすればよいですか?

タスク自体に関する短いコメント。私はステージとステージのクリックをつかむeventListenerを持っています。両方とも同じ機能 - redrawEvents(evt:Event)を実行します。ステージには、特定のイベントを表すいくつかのブロックが含まれています。それぞれの再描画では、これらのブロックが再配置され、イベント(イベント間の接続を表す)も描画されます。

私はすべてのブロックの位置を変更する方法を考え出しましたが、私は線を再描画することに固執しました。

ブロックとは異なり、インタラクティブではないため、すべての行を保持するために単一のシェイプを使用しています。アプリケーションのすべてのポイントが相互に関連するイベントのセットを作成しているので、新しいブロックが作成されるたびにこのシェイプを変更する必要があります。これもまた、再描画機能を呼び出します。形状が変更されるたび

は、ここで私は形に

stage.addEventListener(MouseEvent.CLICK,redrawEvents); 

function redrawEvents (evt:Event) { 
    var lines:Shape = new Shape(); 
    lines.graphics.lineStyle(2, 0xFFFFFF, .75); 
    lines.graphics.clear(); 
    for (var k:int = 0; k < connections.length; k++){ 
     lines.graphics.moveTo(eventList[connections[k][0]].x + 50, eventList[connections[k][0]].y + 50); 
     lines.graphics.lineTo(eventList[connections[k][1]].x + 50, eventList[connections[k][1]].y + 50); 
    } 
    addChild(lines); 
} 

を変更するために使用するコードは、しかし、それはまだ画面上に自身の「旧バージョン」を残しています、と私はそれを望んでいません。私はインスタンスを作成して削除しようとしましたが、varions型の変換は問題を解決していません。事前

答えて

3

おかげであなたは線を描画するたびに、あなたはステージに新しいShapeを追加しています。新しい行セットを描画する前に、その参照を保持し、毎回表示リストから削除するか、1つのインスタンスとGraphicsclear()メソッドを使用するだけです。

+0

私はそこでコードを更新しました^とevilguyに返答しました。 まだ、私は何か間違っているか、これらの推奨事項だけでは私の問題を解決していません。今では私はステージ上に線を持っていません:) –

+0

@Loki 'lines'はイベントハンドラのローカル変数です.Shapeの新しいインスタンスで' clear() 'を呼んでいます。クリアはラインスタイルです。 'lines'をクラスフィールドにしたり(そうでなければどこかに置いておく)、一度だけ(イベントが発生するたびに)インスタンス化し、他の描画コマンドの前に' clear() 'を呼び出す必要があります。 – Staven

+0

さて、 'lines'と' lineStyle'定義を 'redrawEvents'の外でグローバル変数と一緒に置くとしましょう。次に、この関数で 'lines'にアクセスするにはどうしたらいいですか? –

0

再描画するたびに新しいShapeインスタンスを作成していますか? removeChild(行)を試しましたか?

+0

私は持っていますが、それは形状のインスタンスを削除し、私は常にオブジェクト間の接続を示す、ステージ上に1インスタンスを保持する必要があります –

+0

@ロキ:新しいインスタンスを追加する前に古いインスタンスを削除する必要があります1。 – Staven

+0

さて、明らかに、シェイプを変更する前に子を削除して、変更後に新しい子を作成する必要があります。それでも、私がそれをやろうとしたときに、私は存在しない子供を取り除くことができないというエラーが出てきました。 –