DisplayObjectを特定のポイントにズームしようとしています。簡単だと思いましたが、今は1日かけて理解しようとしています。
基本的に、これはうまくいくはずだと思います。強調する必要があります。
//newPoint is the point being centered. There is no initial scaling, so I do not need to compensate for that (yet)
//scale is the zoom level
//container is the parent of the obj
//obj is the object being scaled/panned
var p:Point = new Point(
( this.container.width - this.obj.width * scale + newPoint.x * scale ) / 2,
( this.container.height - this.obj.height * scale + newPoint.y * scale ) / 2
);
this.obj.scaleX = this.obj.scaleY = scale;
this.obj.x = p.x;
this.obj.y = p.y;
スケールが1の場合はポイントが中心になりますが、スケールを大きくすると中心から離れていきます。私は何十もの異なる方法を試しました。私がいくつかのサイトで見たこの方法は、まったく同じ結果をもたらしました。誰かがこれを機能させる方法を知っていますか?
編集10-1-12:フォローアップとして、LondonDrugs_MediaServicesが提供したコードスニペットを元の問題の基礎として使用しました。スケールされていない画像に対して特定のスケールで特定のポイントにズームできる必要がありました(Googleマップが特定の場所にズームする方法を考えてみてください)。これを行うには、翻訳コードを実行する前に、画像をポイントの中央に配置する必要がありました。以下に追加のコードを投稿しました。他の用途(ピンチしてズーム、スクロール、ダブルクリック)には、Vesperが提供するコードを使用しました。これは非常にうまく機能しました。
//obj is the object being translated
//container is its parent
//x and y are the coordinates to be zoomed to, in untranslated scaling
//obj.scaleX and obj.scaleY are always identical in my class, so there is no need to account for that
//calculates current center point, with scaling
var center:Point = new Point( ( this.container.width - this.obj.width * this.obj.scaleX ) / 2, ( this.container.height - this.obj.height * this.obj.scaleX ) / 2 );
//calulcates the distance from center the point is, with scaling
var distanceFromCenter:Point = new Point( this.obj.width * this.obj.scaleX / 2 - x * this.obj.scaleX, this.obj.height * this.obj.scaleX / 2 - y * this.obj.scaleX );
//center the object on that specific point
this.obj.x = center.x + distanceFromCenter.x;
this.obj.y = center.y + distanceFromCenter.y;