|
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
|
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
package gui { import flash.display.Bitmap; import flash.display.Sprite; import flash.events.TimerEvent; import flash.utils.Timer; /** * ... * @author EA */ public class BitmapIcon extends Sprite { static private const MAX_PIXELS_SCALED: uint = 5; private var _iconCont: Sprite = new Sprite; private var _iconPic: Bitmap; private var _originalWidth: uint = 0; private var _originalHeigth: uint = 0; private var _blinkTimer: Timer; private var _totalTimes : uint = 0; private var _currentTime: uint = 0; private var _increasingPhase: Boolean = true; private var _oneFrameInsrease:Number = 1; private var _oneFrameDecrease:Number = 1.5; private var _speedUp:Number = 0.075; private var _totalResize:Number = 0; public function BitmapIcon(iconPic: Bitmap) { this.addChild (_iconCont); _iconPic = iconPic; _iconCont.addChild(_iconPic); _iconPic.x = - _iconPic.width / 2; _iconPic.y = - _iconPic.height / 2; } public function blink(times: uint): void { _originalWidth = _iconPic.width; _originalHeigth = _iconPic.height; _totalTimes = times; _blinkTimer = new Timer(30); _blinkTimer.addEventListener(TimerEvent.TIMER, changeSize); _blinkTimer.start(); } private function changeSize(event:TimerEvent) : void { if (_currentTime >= _totalTimes) { _currentTime = 0; _totalResize = 0; _speedUp = 0.01; _blinkTimer.stop(); _blinkTimer.removeEventListener(TimerEvent.TIMER, changeSize); } else if (_increasingPhase == true) { if (_totalResize <= MAX_PIXELS_SCALED) { _totalResize += (_oneFrameInsrease + _speedUp); _iconPic.width += (_oneFrameInsrease + _speedUp); _iconPic.height += (_oneFrameInsrease + _speedUp); _speedUp += _speedUp; } else _increasingPhase = false; } else if (_increasingPhase == false) { if (_totalResize >= 0) { _totalResize -= _oneFrameDecrease; _iconPic.width -= _oneFrameDecrease; _iconPic.height -= _oneFrameDecrease; } else { _iconPic.width = _originalWidth; _iconPic.height = _originalHeigth; _totalResize = 0; _speedUp = 0.01; _currentTime++; _increasingPhase = true; } } } } } Цитата:
[offtopic] Вижу мне многие на "вы" пишут. То, что в ответ всем шпарю на "ты" просьба не считать неуважухой и панибратством. Всего лишь "олдскульные" представления о сетевом этикете... |
|
|||||
Цитата:
Цитата:
P.S. Судя по коду, вы масштабируете _iconPic вместо _iconCont.
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Я уже и так, и эдак попробовал. Просто последний вариант привёл. И да, иконку специально для чистоты эксперимента беру квадратную.
Кстати, если к теории возвращаться, почему для равномерного увеличения требуется масштабировать контейнер? Ведь если он добавлен в качестве дочернего объекта, например, внутрь другого спрайта размером 100*100 пикс. в точку [0,0] - левый верхний угол, то и машстабироваться он, контейнер, будет относительно родительского объекта, то есть с перекосом вправо-вниз. А иконка, хранящаяся в этом контейнере, действительно не изменит своих пропорций, но будет увеличиваться в размере не равномерно во все стороны, а также вправо-вниз. Или я не прав? Собственно в этом проблема. Я, пожалуй, ошибся когда написал о нарушении пропорций. Надеюсь, сейчас суть вопроса прояснилась. |
|
|||||
Масштаб происходит не относительно родителя, а относительно центра объекта(который по умолчанию в левом верхнем углу любого объекта)
Но поместив середину иконки ровно в начало координат этого контейнера с помощью этого кода мы будем масштабировать относительно центра иконки.
__________________
There is no thing in this world that is not simple. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
только я вижу картинку на второй странице?
Добавлено через 8 минут Цитата:
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 23.11.2017 в 19:43. |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Всё, разобрался. У меня на сцене было порядочное нагромождение компонентов, я среди них запутался. Какие-то оказались отцентрованы, какие-то нет, в общем, каша и оливье. Спокойно по очереди все проверил, центры совместил, всё заработало как надо. Спасибо всем, кто откликнулся.
Добавлено через 11 минут Ещё хотел спросить. Если иконка должна "моргнуть", а затем исчезнуть, то просто поставить подряд заруск метода blink() и removeChild не работает, т.к. иконка сразу же исчезает, не успев завершить свою анимацию. Значит, нужно дождаться её окончания. Есть стандартное событие "из коробки", которое диспатчится по завершении анимации? Или самому ваять? |
|
|||||
Если писать в FD, то удобства от этой конструкции ноль, ибо автодополнение в ней не поддерживается)
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
А подскажите ещё, пожалуйста. Если мы дожидаемся окончания анимации перед тем, как убрать компонент, то понятно, что его родитель подписывается на соответствующее событие: _icon.addeventlistener(). Вопрос такой. Можно ли прямо в приёмнике прописать removeChild или нужно непременно создавать отдельный приватный метод, который будет обрабатывать событие? Если можно, то как правильно выглядит синтаксис? Спасибо.
|
Часовой пояс GMT +4, время: 11:16. |
|
« Предыдущая тема | Следующая тема » |
|
|