2011-05-22 28 views
0

我試圖將一個Sprite轉換成BitmapData,以便執行一些碰撞檢測。關於使用Sprites的方式有幾點,這使得它比我預期的更困難:使用不同的註冊點和旋轉將Sprite轉換爲bitmapdata

  • Sprite本身是一個容器,它容納另一個實際上已經在其中繪製盒子的Sprite。內部雪碧的高度位於其寬度的一半,因此它可以通過容器從中心旋轉。
  • 該容器可在任何角度在任何給定時間

旋轉所以我的方法迄今已試圖繪製外的Sprite到一個新的BitmapData Matrix對象以考慮的差別。雖然我可以使用矩陣來使這個工作在一個特定的旋轉角度,但是我找不到一種方法來使它適用於任何旋轉。

下面是我在做什麼吸引到新的BitmapData:

var p:Product = getProduct(); // Product is the container with the inner sprite 
var bounds:Rectangle = p.getBounds(stage); 
var bd:BitmapData = new BitmapData(bounds.width, bounds.height, true, 0x00FFFFFF); 

var m:Matrix = p.transform.matrix; 
// Somewhere here is what needs to be changed, I can't figure out how though 
m.tx = 0; 
m.ty = 0; 

bd.draw(p, m); 

隨着m.tx = 0 & m.ty = 0,這裏是我所得到的一個例子,我想什麼得到:

screencap, not rotated

右側的黃色圖像是實際的框,與黑色的輪廓是「容器」是被旋轉。左邊的圖像是我爲BitmapData獲得的圖像,我希望黃色框不會被截斷。在這個例子中,我可以將tx和ty翻譯爲寬度和高度的一半,這可以起作用。

一個更好的例子是,一旦它的實際旋轉: screencap, rotated

翻譯相同的量與前面的例子將不再在這裏工作,而框將仍然被切斷。我環顧了以前發佈的一些解決方案或其他人的建議,但由於我的容器Sprite和旋轉,他們似乎不適合我。

我非常感謝在這個問題上的任何幫助。

謝謝!

回答

2

嘗試更換

m.tx = 0; 
m.ty = 0 

m.tx = -bounds.x; 
m.ty = -bounds.y; 
+0

非常感謝您!它是 - =而不是 - ,但是它做到了。我不知道如何不花這麼多時間。 – Gary 2011-05-22 23:18:16