AS3 Изменить точку регистрации MovieClip на центр ширины и низ

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

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

Спасибо.


person Francisc    schedule 13.10.2010    source источник


Ответы (2)


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

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

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

//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();
person Chunky Chunk    schedule 13.10.2010
comment
Ха-ха, да, старая проблема с точкой регистрации. :) Спасибо за ответ, отлично. - person Francisc; 14.10.2010
comment
Я не понимаю, как этот код меняет точку регистрации. Единственное, что я вижу установленным, - это координаты x и y относительно сцены. - person Kevin Remisoski; 03.04.2015

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

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

    • And you don't mind putting the object into another container, put it into a new Sprite object at a location where its bottom center meets the (0,0) location, then you can scale the sprite container instead of your asset.
    • И вы не против пожертвовать векторным качеством для моментального снимка вашего ресурса BitmapData, сделайте снимок вашего ресурса (как бы он выглядел «полностью раскрытым / растянутым»), обрезайте растровое изображение (используя комбинацию:

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

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

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

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

person bigp    schedule 14.10.2010
comment
Спасибо, bigp. Я надеялся, что есть способ AS3 сделать это, как если бы вы перемещали точку вращения с помощью Transform Tool (Q). - person Francisc; 19.10.2010
comment
Да, я не знаю об этом. Похоже, это только инструмент для разработки Flash IDE. Как ни странно, они поддерживают настройку 9-сегментной сетки во время выполнения с AS3. - person bigp; 21.10.2010
comment
Просто подумал, можно ли использовать свойство объекта .scrollRect? (Не уверен, что это приведет к худшим проблемам, таким как обрезка) - person bigp; 21.10.2010