ActionScript - Рисование изображения в центре фигуры в ActionScript. - PullRequest
0 голосов
/ 20 октября 2011

Я пытаюсь нарисовать изображение в ActionScript, я устанавливаю его как BitmapFill в прямоугольнике. Проблема в том, что если я переместлю прямоугольник от начала координат (0,0), в моем случае я начну рисовать прямоугольник в (20,35), фон растрового изображения не будет следовать. Фон всегда рисуется в (0,0), а затем повторяется, поэтому я получаю не центрированное изображение, а 2 пополам изображения. Вот как выглядит мой код:

public class PageTileRenderer extends VBox 
{
  private var sp:Shape;

  [Embed(source="../../../../assets/content.png")]
  private var contentIconClass:Class;
  private var contentIcon:Bitmap = new contentIconClass ();

  // ...

  private function drawIcon():void{
    sp.graphics.beginBitmapFill(contentIcon.bitmapData);
    sp.graphics.drawRect(20, 35, 13, 13);
    sp.graphics.endFill();
  }
}

Итак, мой вопрос - как переместить начало заливки фона. Или есть другое решение для рисования изображения по центру.

Заранее спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 20 октября 2011

Вы можете использовать матрицу преобразования для перемещения источника вашего растрового изображения. Его можно передать в качестве аргумента beginBitmapFill (используя существующий код):

private function drawIcon():void{
  var matrix:Matrix = new Matrix();
  matrix.translate(20, 35);
  sp.graphics.beginBitmapFill(contentIcon.bitmapData, matrix);
  sp.graphics.drawRect(20, 35, 13, 13);
  sp.graphics.endFill();
}

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

0 голосов
/ 20 октября 2011
private function init():void
{
     loader = new Loader();
     loader.load(new URLRequest("benny.jpg"));
     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, action);
}
private function action (e:Event)
{
    var bmpData:BitmapData = new BitmapData(180,220);
    bmpData.draw(e.target.content);
    var bmp:Bitmap = new Bitmap(bmpData);
    with(bg.graphics){
        beginFill(0xefefef,1);
        drawRoundRect(0,0,300,300,3,3);
        endFill();
    }
    addChild(bg);
    bg.x = stage.stageWidth/2-bg.width/2;
    bg.y = stage.stageHeight/2-bg.height/2;
    bg.addChild(bmp);
    bmp.x = bg.width/2-bmp.width/2;
    bmp.y = bg.height/2-bmp.height/2;
}
...