2011-10-23 65 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