AS3 Изменить точку регистрации мувиклипа, чтобы она была центром ширины и дна - PullRequest
1 голос
/ 13 октября 2010

У меня есть MC в анимации AS3, и я хочу увеличить его высоту снизу вверх, что означало бы, что точка регистрации должна быть снизу от MC и центром ширины (горизонтальный центр).

Как я могу это сделать, пожалуйста?

Спасибо.

Ответы [ 2 ]

1 голос
/ 14 октября 2010

Моя рекомендация к проблеме старой точки регистрации, несколько вещей ...

  • Если вы можете отредактировать символ, и у вас есть только несколько для обработки, честно - сделайте это вручную.
  • Если у вас достаточно много для обработки, но вы все равно можете нанять обезьян чтобы переместить символы, рассмотрим изучая сценарии JSFL для пакетной обработки обработать ваш выбор библиотеки символы.
  • Если вы ДОЛЖНЫ использовать AS3 для его динамического изменения ...

    • И ты не против положить объект в другой контейнер, положи его в новый объект Sprite на место, где его нижний центр соответствует (0,0) местоположению, то вы можно масштабировать контейнер спрайтов вместо вашего имущества.
    • И вы не против пожертвовать качеством вектора для BitmapData снимок вашего имущества, возьмите снимок вашего актива (как это было бы появляются «полностью открыт / растянут», обрезать растровое изображение (с помощью комбинация:

    var rect: Rectangle = bitmapData.getColorBoundsRect (0xff000000, 0, false); yourCroppedBitmapData.copyPixels (bitmapData, rect, ...);

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

Или ... нанимать обезьян тоже было бы весело: P

Но да, это некоторые из альтернативных способов изменения положения символов.

1 голос
/ 13 октября 2010

ах, старая проблема с точкой регистрации.:)

Однажды я увидел небольшой пользовательский класс, который позволял вам изменять точку регистрации вашего экранного объекта, как вы можете просто сделать это во Flash Authoring.Если вам интересно, поищите в Google.

решение довольно простое.точка регистрации экранных объектов назначается в зависимости от того, как объект добавлен в список отображения.Вы просто должны принять это во внимание при добавлении экранного объекта в список отображения, а затем настроить простую математику для изменения точки регистрации:

//Set up rect's width and height
var rectWidth:uint = 200;
var rectHeight:uint = 100;

//Assign registration point (TL, TC, TR, CL, C, CR, BL, BC, BR = top, center, bottom, left, right)
var registration:String = "C"

//Assign rect's X and Y properties
var rectX:int;
var rectY:int;

switch (registration)
       {
       case "TL": rectX = 0;
                  rectY = 0;
                  break;

       case "TC": rectX = -rectWidth / 2;
                  rectY = 0;
                  break;

       case "TR": rectX = -rectWidth;
                  rectY = 0;
                  break;

       case "CL": rectX = 0;
                  rectY = -rectHeight / 2;
                  break;

       case "C":  rectX = -rectWidth / 2;
                  rectY = -rectHeight / 2;
                  break;

       case "CR": rectX = -rectWidth;
                  rectY = -rectHeight / 2;
                  break;

       case "BL": rectX = 0;
                  rectY = -rectHeight;
                  break;

       case "BC": rectX = -rectWidth / 2;
                  rectY = -rectHeight;
                  break;

       case "BR": rectX = -rectWidth;
                  rectY = -rectHeight;
       }


//Draw the rect
var rect:Sprite = new Sprite();
rect.graphics.beginFill(0xFF0000);
rect.graphics.drawRect(rectX, rectY, rectWidth, rectHeight);
rect.graphics.endFill();
...