2010-08-26 36 views
1

好吧,所以我有兩個PNG文件,一個圓圈和一個迷宮。基本上迷宮是一個廣場,有一些通過它雕刻的路徑。我想繪製這些圖像,將圓圈移動到鼠標座標上,當圓圈與迷宮牆壁相交時,文本會顯示「點擊」,如果沒有,則會顯示「未命中」。現在我想使用bitmapdata.hittest方法來完成這些操作。該圓是32x32圖像,迷宮是256 * 256圖像。我已經完成了一切設置,並且所有內容都正確地在屏幕上繪製,但我無法獲得其實際碰撞檢測部分的工作情況,即它始終顯示「未命中」而不是「已命中」,即使圓圈與迷宮。以下是我所做的:使用bitmap.hittest在actionscript中的碰撞檢測

package 
{ 
    import flash.display.*;  
    import flash.events.*; 
    import flash.geom.*; 
    import flash.text.TextField; 
    import flash.utils.getTimer; 
    import flash.net.URLRequest; 
    import flash.ui.Mouse; 
    import flash.system.*; 
    import Math; 
    public class MAIN extends Sprite 
    { 
     private var TEXT:TextField = new TextField(); 
     public var LOADER_1:Loader = new Loader(); 
     public var LOADER_2:Loader = new Loader(); 
     public var DATA_1:BitmapData; 
     public var DATA_2:BitmapData; 

     public function MAIN() 
     { 
      LOADER_2.load(new URLRequest('TEST.png')); 
      LOADER_2.x = 125;  LOADER_2.y = 125; 
      DATA_2 = new BitmapData(256,256,true,0); 
      DATA_2.draw(LOADER_2); 
      addChild(LOADER_2); 

      LOADER_1.load(new URLRequest('BALL.png')); 
      LOADER_1.x = mouseX;  LOADER_1.y = mouseY; 
      DATA_1 = new BitmapData(32,32,true,0); 
      DATA_1.draw(LOADER_1); 
      addChild(LOADER_1); 

      Mouse.hide(); 
      stage.frameRate = 60; 
      addChild(TEXT); 
      stage.addEventListener(Event.ENTER_FRAME,STEP); 
     } 
     public function STEP(event:Event):void 
     { 
      LOADER_1.x = mouseX; 
      LOADER_1.y = mouseY; 

      if (DATA_1.hitTest(new Point(LOADER_1.x,LOADER_1.y),255,DATA_2,new Point(LOADER_2.x,LOADER_2.y))) 
      { 
       TEXT.text = 'hit'; 
      } 
      else 
      { 
       TEXT.text = 'miss'; 
      } 
     } 
    } 
} 

那麼有人能告訴我我在做什麼錯嗎?

回答

0

您必須等到圖像加載後才能將其繪製到BitmapData

 LOADER_2.load(new URLRequest('TEST.png')); 
     LOADER_2.x = 125;  LOADER_2.y = 125; 
     DATA_2 = new BitmapData(256,256,true,0); 
     DATA_2.draw(LOADER_2); 

此時您正在爲您的加載程序「快照」,但加載程序沒有內容。所以,你應該在Event.COMPLETE事件中對每個加載器進行觸發,並將該對象抽取到BitmapData對象。

+0

那我該怎麼做呢?我試過這個: LOADER_1.contentLoader.addEventListener(Event.COMPLETE,LOADED_1); 但有一個編譯器錯誤。 – user421215 2010-08-27 01:38:20

+0

好吧,我得到它編譯(這是contentLoaderInfo),但現在沒有任何顯示。這是我做的(抱歉,如果它沒有顯示出來右): \t \t \t LOADER_2.contentLoaderInfo.addEventListener(Event.COMPLETE,LOADED_2); \t \t \t LOADER_2.load(new URLRequest('TEST.png')); \t \t \t \t \t \t功能LOADED_2(事件:事件):無效 \t \t \t { \t \t \t \t LOADER_2.x = 125; \t \t LOADER_2.y = 125; \t \t \t \t DATA_2 = new BitmapData(256,256,true,0); \t \t \t \t DATA_2.draw(LOADER_2); \t \t \t \t addChild(LOADER_2); \t \t \t} – user421215 2010-08-27 01:56:02

+0

我結束了使用嵌入代替... 我不喜歡它,但它是如此容易處理。 – user421215 2010-09-01 00:43:23