2011-08-16 12 views
0

私はタイルやマップとして機能する他の資産でいっぱいのコンテナを持っています。その容器の上には、プレーヤーが見るカメラの役目をするマスクがあります。カメラを動かすために、コンテナを動かす。ズームアウト時にカメラの位置を維持する方法は?

Iは以下の式を使用して容器内のタイルを中心にすることができるよ:

container.x = (((tile.x + (tile.width/2)) * container.scaleX) * -1) + (mask_width/2); 
container.y = (((tile.y + (tile.height/2)) * container.scaleY) * -1) + (mask_height/2); 

これはマスクの中心がタイルであろうように、マスクとの相対位置にコンテナを移動させます質問。

私は最近、ズーム機能を追加しました。これは、コンテナのscaleX/scaleYを大きくしたり小さくしたりするだけです。上記のセンタリングコードを修正しましたが、問題が発生して、ビューが縮小するにつれて "カメラ"が動き回っていないように見えます。基本的にズームアウトすると、コンテナが縮小するため、すべてが左に移動するように見えます。上記のコードで何かを中心にするとすべてうまくいきますが、zoomXのときと同じ位置にあるように見えるようにscaleXとscaleYの違いに基づいてコンテナを右に突き上げる方法が必要です。私はすでにいくつかのことを試したことがありますが、私は頭の中で頭を包むことができません。負荷の

答えて

0

コメントアウトこのコード

container.x = (((tile.x + (tile.width/2)) * container.scaleX) * -1) + (mask_width/2); 
container.y = (((tile.y + (tile.height/2)) * container.scaleY) * -1) + (mask_height/2); 

このコードサイズ変更/スケールの

cam.x = container.width/2 
cam.y = container.height/2 

は私にそれを把握するために管理し、この

container.x = container.x + amountOfWidthChanged/2 
container.y = container.y + amountOfHeightChanged/2 
+0

Erは、プレイヤーがコンテナの動きを見るのを妨げる視点であるため、マスクはカメラではありません。フラッシュは0,0からその高さ/幅にレンダリングされるため、コンテナは代わりに移動するため、移動できません。とにかく、ズームの高さ/幅の違いに基づいて調整を試みましたが、それは過剰です。 2または4で割っても、右にパンを移動させました。 – Mont

+0

カメラコンテナを移動するマスクは移動しません。マスクはあなたが見る「窓」です。また、登録ポイントを0,0からcontainer.width/2にオフセットすると、camのcontainer.height/2はスケーリングが中央に配置されます。私が投稿したコードの残りの部分は、マスクを中心にすることでしたが、余分でした。 –

+0

これがうまくいかない場合は、あなたが記述したレイアウトは、それがどのようなものかは分かりません。 –

0

ようなことを行うのですか様々なas3ヘルパークラスのいくつかの研究を行うことで自分自身を作り出します。ここでは、この問題を抱えている他の人がここに足を踏み入れることを期待しています:

movieclip.transform.matrixは、scaleX/Yを変更するときのズームポイントを変更することができます。 MatrixTransformerには、登録ポイントに対して2つのポイントを一致させる機能があります。ここで私が使用したコードは次のとおりです。

var mat:Matrix = container.transform.matrix.clone(); 
var externalCenter:Point = new Point(stage.mouseX, stage.mouseY); 
var internalCenter:Point = new Point(container.mouseX, container.mouseY); 

// container.scaleX and container.scaleY change here 

MatrixTransformer.matchInternalPointWithExternal(matrix, internalCenter, externalCenter); 
roomContainer.transform.matrix = matrix; 
関連する問題