scale9Grid и Bitmaps - они работают вместе или нет? - PullRequest
3 голосов
/ 10 декабря 2010

Я еще не привык к среде Flash IDE, поэтому я пишу чистый код в FlashDevelop.Я получил спрайт различных графических ресурсов, один из которых должен был использоваться с этой чрезвычайно полезной функцией scale9Grid ... Это не сработало.Так как я делал это впервые в своей жизни, я думал, что что-то напортачил, но потом я попробовал drawRoundRect и beginFill (а не beginBitmapFill), и это сработало, как и ожидалось.Моя логическая мысль заключалась в том, что он не работает с растровыми изображениями (несмотря на то, что на примере Adobe Livedocs они используют изображение орангутанга для демонстрации возможностей scale9Grid).

После этого я читаю различные мнения, начиная с«это работает просто отлично» и заканчивается словами «это не работает, пошлите вам, Adobe».Теперь мне любопытно, работает это или нет?

Я нашел, как я могу указать параметры scale9Grid прямо в операторе Embed, но мое внедренное изображение - спрайт.Я думаю, это не сработает в любом случае, верно?

Ответы [ 4 ]

9 голосов
/ 27 июня 2011

После поиска в теге [Embed] и анализа его подхода я выяснил, как делать scale9Grid без кучи растровых изображений или перерисовывать графику каждый раз, когда вы изменяете размер.(или объекты Graphics) - не растровые изображения напрямую.Поэтому вы должны нарисовать ваше растровое изображение в графическом объекте Shape или Sprite:

shape.graphics.beginBitmapFill(bitmapData);

Хитрость заключается в том, чтобы сделать отдельную заливку для каждого среза, но только в первый раз:

Не забудьте сделать endFill (), иначе он не будет работать.После подготовки формы вам просто нужно добавить ваш scale9Grid Rectangle, и все готово - идеальное растровое масштабирование без дополнительных экранных объектов или непрерывного перерисовывания.

2 голосов
/ 10 декабря 2010

Я ударился головой о сетку шкалы, пока не нашел эту статью . Сетка масштаба имеет много ограничений, если они не соответствуют, она не применяется. Если вы не можете обойти их, вот 9-битный подход: ScaleObject .

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

Хороший фрагмент, Тайлер Райт !

Некоторые оптимизируют:

static public function drawAndScale9Grid(s : Shape, bitmapData : BitmapData, rect : Rectangle) : void {
    const gridX : Vector.<Number> = Vector.<Number>([rect.left, rect.right, bitmapData.width]);
    const gridY : Vector.<Number> = Vector.<Number>([rect.top, rect.bottom, bitmapData.height]);

    const g : Graphics = s.graphics;
        g.clear();

    var left : Number = 0;
    var i : int, j : int;
    const n : uint = gridX.length, m : uint = gridY.length;
    while(i < n) {  
        j = 0; // reset j
        var top : Number = 0;
        while(j < m) {
            // draw shape with special coords of bitmapdata
            g.beginBitmapFill(bitmapData);
            g.drawRect(left, top, gridX[i] - left, gridY[j] - top);
            g.endFill();

            top = gridY[j];

            j++;
        }
        left = gridX[i];

        i++;
    }
    s.scale9Grid = rect;
}
1 голос
/ 10 декабря 2010

Растровые изображения не будут работать с scale9Grid, если вы не разбили растровые изображения. Вы также можете использовать пользовательские классы, которые помогут вам разбить растровые изображения.

http://www.dreaminginflash.com/2007/12/03/9-slice-and-bitmap/

UPDATE:

О понимании масштабирования. Посмотрите на это изображение. красные детали будут масштабироваться при необходимости.

alt text

...