我試圖將DisplayObject放大到某個點。我認爲這很容易,但我花了一天的時間試圖找出答案。放大和縮小點
基本上我覺得應該是的工作。強調應該。
//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,它會使點居中,但當您增加比例時,它會越來越遠離中心。我嘗試了幾十種不同的方法。我在幾個網站上看到的This method產生了相同的確切結果。任何人有任何想法如何讓這個工作?
編輯12年10月1日: 作爲後續,我把作爲我原來的問題的基礎提供的code snippet是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;
試着看一下我的這個問題的答案:HTTP://計算器。com/questions/12571958/as3-scale-parent-mcs-center-to-child-mcs-center/12572155#12572155 – BadFeelingAboutThis
導致與我嘗試使用的其他方法一樣的問題。只有圖像的實際中心會居中,其他所有內容都呈指數關閉。看這裏。 http://imgur.com/M1kBJ圖片是700x525,父母是1024x768的舞臺。儘管如此,感謝您的幫助。 –
其實......我現在正在看它,並且這個代碼片段和Vesper提供的片段定位了點(200,200)在......(200,200)。他們沒有將它置於屏幕上,而是將其放置在屏幕上(200,200)。很有意思。我現在可能能夠重新做這件事。 –