2012-07-19 61 views
0

我需要爲舞臺添加一個MovieClip,限制條件是它只能添加到舞臺上的空白區域。舞臺本身要麼包含複雜的形狀,要麼可以由用戶操作,即他可以拖動/移動物體來改變空白區域。 hitTest和hitTestObject方法需要DisplayObject已經在舞臺上可用。什麼是正確的路要走 - 我能想象的唯一解決方案是在舞臺上添加了我的對象,然後重複進行點擊測試?HitTest for still not on階段

[想象一下,在視頻遊戲中添加小精靈 - 它們必須在空白區域產卵;如果他們彼此的內彈出,那麼它會看起來非常奇怪。]

回答

1

那麼,當你創建一個新的類,只需用一個變量將其關閉,並設置能見度爲false,那麼循環,直到有沒有hitTest。

是一個愚蠢的例子:

public class someClass extends Sprite 
{ 
    private var objectsOnStage:Array; 
    public function someClass(objectsArray:Array) { 
     objectsOnStage = objectsArray; 
     visible = false; 
     addEventListener(Event.ADDED_TO_STAGE, init); 
    } 
    private function init(e:Event){ 
     removeEventListener(Event.ADDED_TO_STAGE, init); 
     addEventListener(Event.ENTER_FRAME, SEARCH); 
    } 
    private function SEARCH(e:Event) { 
     var doesHit:Boolean = false; 
     x = Math.round(Math.random() * (550 - 0)) + 0; 
     y = Math.round(Math.random() * (400 - 0)) + 0; 
     for (var i:int = 0; i < objectsOnStage; i++) { 
      if (doesHit) break; 
      if (this.hitTestObject(objectsOnStage[i])) { 
       doesHit = true; 
      } 
     } 
     if (doesHit) return; 
     placedInit(); 
    } 
    private function placedInit() { 
     visible = true; 
     removeEventListener(Event.ENTER_FRAME, SEARCH); 
     //now init the stuff you want. 
    } 
} 
0

你只要檢查這兩個剪輯的邊界框重疊。就像這樣:

import flash.geom.Rectangle; 
import flash.display.MovieClip; 

// create simple movie clips that has a rectangle shape inside 
var sym1 : MovieClip = new Sym1(); 
var sym2 : MovieClip = new Sym2(); 

// get a rectanle of both clipt 
var boundingBox1 : Rectangle = sym1.getBounds(this); 
var boundingBox2 : Rectangle = sym2.getBounds(this); 

// check if bounding boxes of both movie clips overlaps 
// so it works like hitTestObject() method 
trace(boundingBox1.intersects(boundingBox2)) 
0

我知道這個帖子是超級老,但在情況下,它可以幫助任何人 -

如果你需要做的命中測試中的MovieClip不是在舞臺上。解決方法是首先將其柵格化爲位圖。

var bitmapData:BitmapData = new BitmapData(mc.width, mc.height, true, 0x0000000); 
bitmapData.draw(mc); 

if (bitmapData.getPixel32(x, y) > 0) { 
    // Hit true. 
}