2011-03-20 32 views
0

我在乒乓/破磚遊戲中遇到了一個奇怪的問題:玩家的特殊能力之一是讓第二個球從主體中分離出來其中一個的作用與主要作用在短時間內消失之前一樣。問題在於,當第二個球接觸到舞臺邊界並且應該簡單地反轉其x或y速度(取決於邊界命中)時,出於某種奇怪原因,它顯然也會增加其寬度和高度屬性。圖形不會改變,但寬度和高度的值確實(顯着),並且這導致了我爲奇怪的情況定義的一些stuckHandler方法,在這種情況下,舞會最終部分在舞臺後被重複調用。我沒有在代碼中改變寬度,高度或scaleX/scaleY屬性,所以我不知道爲什麼會發生這種情況。在閱讀Adobe文檔時,我發現以下兩點對此事有潛在的興趣 -顯示對象的寬度/高度有趣的問題

  1. 關鍵字THIS:對包含對象的方法的引用。當腳本執行時,'this'關鍵字引用包含腳本的對象。在方法體內,'this'關鍵字引用包含被調用方法的類實例。 ---這兩種說法不一樣嗎?我不太瞭解腳本開始處的'this'和方法內部的'this'之間的範圍差異的細節......由於第二個球對象是在遊戲期間動態創建的(主球是靜態對象創建運行前,並通過一個獨立的驅動程序類Ball控制),實際上鍊接到一個控制和構造它的類Ball2,'this'關鍵字在整個課程中的不同位置用於引用圖形。我擔心在AS3中圍繞「這個」的細微差別可能會導致一些混淆,這可能是我看到的奇怪情況的部分原因。

  2. 寬度/高度屬性:指示顯示對象的寬度/高度(以像素爲單位)。寬度/高度根據顯示對象內容的邊界計算。設置寬度/高度屬性時,會相應地調整scaleX/scaleY屬性。 ---「顯示對象的內容」究竟意味着什麼?這只是圖形還是在某些情況下可能是別的?出於某種原因,速度逆轉後內容是否會改變?通過調試打印語句,我發現,在其中寬度與高度擴展scaleX和scaleY屬性保持在1,表明Flash不點「瞭解」對象的大小,有效地改變......

我附上了輸出日誌,其中顯示了與第二個球的位置,速度和大小有關的一些屬性,以及它們隨時間變化的情況。您可以看到,在速度反轉之後,寬度和高度屬性顯着增加,這表示與邊界發生碰撞。另外值得注意的是,第二個球是作爲主文檔類的子元素創建的(它沒有應用於它的變換,實際上從未添加到顯示列表中),並且它似乎在適當的舞臺全局座標下運行系統。

ffLog.txt Ball2.txt

回答

0

從您的Ball2類:

... 
callParts = new CallParts((this.x + (this.width/2)),50); 
addChild(callParts); 

你添加一些尺寸的小孩球。難怪它的大小增加了。 DisplayObject總是足夠大以包含其子元素和/或圖形形狀。你確定你的對象嵌套正確嗎?

+0

......並且這樣做了。謝謝! – jeff 2011-03-20 17:29:50