2010-10-13 3 views
1

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

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

спасибо.

ответ

1

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

Я однажды увидел небольшой пользовательский класс, который позволил вам изменить точку регистрации вашего экранного объекта, как вы можете просто сделать в 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(); 
+0

Ха-ха, да, проблема с регистрацией. :) Спасибо за ваш ответ, отлично. – Francisc

+0

Я не понимаю, как этот код делает что-либо, чтобы изменить точку регистрации. Единственное, что я вижу, - это координаты x и y относительно сцены. –

1

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

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

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

    вар прямоугольника: Rectangle = bitmapData.getColorBoundsRect (0xff000000, 0, ложь); yourCroppedBitmapData.copyPixels (BitmapData, Прямоугольник, ...);

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

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

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

+0

Спасибо, bigp. Я надеялся, что есть способ AS3 сделать это так же, как и при перемещении точки поворота с помощью инструмента Transform (Q). – Francisc

+0

Да, не то, что я знаю. Кажется, это только инструмент разработки Flash IDE. Как ни странно, они поддерживают настройку 9-срезной сетки во время работы с AS3. – bigp

+0

Только что-то подумал, можно ли использовать свойство объекта .scrollRect? (Не уверен, что это приведет к худшим проблемам, хотя, как отсечение) – bigp