идеальное столкновение с пикселем + блинтинг - PullRequest
0 голосов
/ 24 октября 2011

Я использую движок, который использует bitmapData.Нет экранных объектов.

Существует ли быстрое пиксельное обнаружение столкновений для такой игровой системы?

Я уже пробовал 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, так что это не должно быть проблемой.

1 Ответ

1 голос
/ 24 октября 2011

Нельзя оставлять комментарии (пока);поэтому нужно сделать это с помощью ответа.

Не очень понятно, как связаны два фрагмента кода.Единственное, что я вижу, это то, что в первом фрагменте кода создается bitmapData, но он не используется и не заполняется чем-либо.

Так что HitTest всегда будет неудачным, я думаю, поскольку bitmapData существует только из прозрачных пикселей.1006 * В следующем примере показано, что HitTest, похоже, подходит (хотя понятия не о скоростях): http://www.mikechambers.com/blog/2009/06/24/using-bitmapdata-hittest-for-collision-detection/

...