2011-09-18 44 views
0

我有一個我繪製的叫做Map的動畫片段。它有一個叫Wall的孩子。我試圖做一個函數,返回一個2d的瓦片數組,如果這個瓦片中有東西或沒有,用於尋路。AS3 hitTestPoint對於一個函數總是返回false

問題是,levelGrid是完全錯誤的。我不知道我做錯了什麼。

我用鮮紅色填充了整個動畫片段(牆),是的它仍然返回false。

Map和Wall的x和y都是0,所以我認爲hitTestPoint不應該接受全局x/y。

它們被添加到顯示列表中。

我的其他運動測試工作正常。

我的代碼:

public function levelMap() { 
    for (var i = 0; i < height/25; i++) { 
     levelGrid[i] = []; 
     for (var j = 0; j < width/25; j++) { 
      levelGrid[i][j] = this.getChildByName("Wall").hitTestPoint(j*25,i*25,true); 
     } 
    } 
    trace(levelGrid); 
} 

在此先感謝(levelGrid是一個類變量)

回答

1

我做了一個視覺測試出你的代碼。我沒有改變任何功能,所以我認爲你的問題是你的圖形。檢查圖形的寬度,高度和位置。如果你沒有得到任何數組,那麼可能這些值設置不正確。

每個點代表在此測試中的hitTestPoint。如果它的綠色,你有一個命中(真正的返回值)。紅色意味着沒有命中。希望這可以幫助。


TestHitPoint.as

package 
{ 
    import flash.display.Sprite; 

    public class TestHitPoint extends Sprite 
    { 

     private static const TILE_SIZE : int = 25; 

     private var levelGrid : Array; 

     public function TestHitPoint() 
     { 

      // add graphics to test 
      addChild(new WallGraphics()); 

      // fix array 
      levelGrid = new Array(); 

      // loop 
      for (var i : int = 0; i < height/TILE_SIZE; i++) 
      { 
       levelGrid[i] = []; 

       for (var j : int = 0; j < width/TILE_SIZE; j++) 
       { 
        var success : Boolean = this.getChildByName("Wall").hitTestPoint(j*TILE_SIZE, i*TILE_SIZE, true); 

        levelGrid[i][j] = success; 

        addChild(new PositionMarker(j*TILE_SIZE, i*TILE_SIZE, success)); 
       } 
      } 
     } 

     public function levelMap() : void 
     { 

     } 

    } 
} 
import flash.display.Sprite; 

internal class WallGraphics extends Sprite 
{ 
    public function WallGraphics() 
    { 
     name = "Wall"; 

     with(graphics) 
     { 
      beginFill(0x0000FF, 1); 
      drawRect(100, 50, 60, 200); 
      drawRect(50, 100, 200, 50); 
      endFill(); 
     } 
    } 
} 

internal class PositionMarker extends Sprite 
{ 
    public function PositionMarker(posX : Number, posY : Number, success : Boolean) 
    { 
     with(graphics) 
     { 
      beginFill((success) ? 0x00FF00 : 0xFF0000, 1); 
      drawCircle(posX, posY, 4); 
      endFill(); 
     } 
    } 
} 

輸出:

enter image description here

+0

可悲的是,我不能讓它在我的主要項目。一個新項目工作正常。 :/(是的,我複製並粘貼完全相同的代碼) – apscience

+0

好吧,如果我在我的文檔類中它的工作。奇怪的。本地/全球職位?但是它的每一個父母的x和y都是0,0(當代碼執行時) – apscience

+0

我只是會相信這是一個毀了我一天的鬼。把我所有的牆上代碼放入我的文檔類中。謝謝! – apscience