не работает кэширование и рендеринг спрайт-листов - PullRequest
0 голосов
/ 26 октября 2011

Я бы хотел кэшировать мою таблицу спрайтов (плитку листов) в массив.Я делаю это потому, что каждая spritesheet должна кэшироваться внутри массива, чтобы мои объекты могли легко извлекать из них свои тайлы.Но мой кеш, похоже, не работает, потому что из него абсолютно ничего не выводится.Я ничего не вижу.

В моем кеше что-то есть (вероятно, bitmapData), и оно не равно нулю, поэтому в настоящее время я не знаю, где может быть проблема.

Может кто-то помочьмне с этой проблемой, пожалуйста?

эта функция должна рендерить каждую плитку массива в фон с помощью copypixels

public function renderCachedTile(canvasBitmapData:BitmapData,    tileArray:Array):void
    {

        tileCache = tileArray;

        tileArray = [];

        x = nextX;
        y = nextY;

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

        tileRect.x = tileWidth;
        tileRect.y = tileHeight;

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

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


            } else {

                currentTile++;
                if (currentTile >= tilesLength - 1)
                {
                    currentTile = 0;
                }


            }

        } else {
            animationCount++;
        }

        canvasBitmapData.lock();    


        canvasBitmapData.copyPixels(tileCache[currentTile], tileRect, point);
        canvasBitmapData.unlock();


    }

эта функция 'разделяет' мою таблицу спрайтов на плитки и выбрасывает их вмассив

private function tileToCache():void {
        var tileBitmapData:BitmapData = new BitmapData(tileWidth, tileHeight, true, 0x00000000);
        var tilePt:Point = new Point(0, 0);
        var tileRect:Rectangle = new Rectangle;


        tileCache = [];

        for (var tileCtr:int = 0; tileCtr < tilesLength; tileCtr++) {

            tileBitmapData.lock();
            tileRect.x = int((tileCtr % spritesPerRow)) * tileWidth;
            tileRect.y = int((tileCtr / spritesPerRow)) * tileHeight;

            tileBitmapData.copyPixels(tileSheet, tileRect, tilePt);
            tileBitmapData.unlock();

            tileCache.push(tileBitmapData);

        }
}

1 Ответ

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

Если в вашем примере отсутствует код, в вашем tileToCache вы создаете и используете tileRect без определения ширины и высоты:

private function tileToCache():void {
    var tileRect:Rectangle = new Rectangle;

    /* ... */
    tileBitmapData.copyPixels(tileSheet, tileRect, tilePt);

Если ваш источник был на 0, 0, я полагаюВы хотели бы:

var tileRect:Rectangle = new Rectangle(0, 0, tileWidth, tileHeight);
...