2011-10-23 98 views
0

我正在使用使用bitmapData的blitting引擎。沒有顯示對象。像素完美碰撞+ blitting

是否有快速像素完美的碰撞檢測可用於這樣的遊戲系統?

我已經嘗試過CDK,但是沒有起作用,因爲它假定你有顯示對象,而我的對象不使用它。有時候我的物體很大,在這種情況下hitTest很糟糕。我已經嘗試了圈到圈的碰撞,但是這也沒有辦法。任何幫助或提示?

更新:

public function renderTile(canvasBitmapData:BitmapData):void 
    { 
     x = nextX; 
     y = nextY; 

     point.x = x; 
     point.y = y; 

     if (animationCount >= animationDelay) 
     { 
      animationCount = 0; 

      if(reverse) 
      { 
       currentTile--; 
       if (currentTile < 1) 
       { 
        currentTile = tilesLength - 1; 
       } 
      } else { 
       currentTile++; 
       if (currentTile == tilesLength) 
       { 
        currentTile = 0; 
       } 
      } 

     } else { 
      animationCount++; 
     } 

     canvasBitmapData.lock();  
     tileRect.x = int((currentTile % spritesPerRow)) * tileWidth; 
     tileRect.y = int((currentTile/spritesPerRow)) * tileHeight; 
     bitmapData = new BitmapData(tileWidth - oversize, tileHeight - oversize, true, 0x000000); 

     canvasBitmapData.copyPixels(tileSheet, tileRect, point); 
     canvasBitmapData.unlock(); 
    } 

調用則hitTest:

if (player.bitmapData.hitTest(player.point, 255, tempAsteroid.bitmapData, tempAsteroid.point, 255)) 

目前的衝突不會在所有的工作。我可以飛過我的物體,我完全沒有碰撞。我讀過flash player standalone v10.1與bitmapData.hitTest有關的問題,但我使用的是10.3,所以這應該不是問題。

+0

什麼阻擊器引擎您使用的? –

回答

1

不能發表評論(yet);所以必須通過回答來完成。

這兩個代碼片段是如何關聯的並不十分清楚。我唯一看到的是,在第一個代碼片段中,bitmapData被創建,但沒有被使用或填充任何東西。

所以hitTest總是會失敗我猜,因爲bitmapData只存在透明像素。

下面的示例演示則hitTest似乎走不過(約合速度不知道)的方式: http://www.mikechambers.com/blog/2009/06/24/using-bitmapdata-hittest-for-collision-detection/

+0

是的。你是對的!事實上,我的bitmapData是空的,因此hitTest在執行時總是會失敗。非常感謝你!現在我必須重新構建我的小塊傳輸引擎,因爲我需要將每個單獨的塊緩存到一個數組中,以便我可以將這些緩存的塊用於我的bitmapData.hitTest!謝啦!:) – drpelz