Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.11.2017, 14:08
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 41  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
with(icon.graphics)
Гы,я думал эту инструкцию еще в as2 выпилили

Старый 23.11.2017, 17:50
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 42  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Цитата:
Сообщение от ZergMaster Посмотреть сообщение
Appleman вы напишите полный код уже, который делает дела - и тот, который добавляет картинку, и тот, который её скаллирует, и тот, который добавляет листенеры и вообще весь, который относится к сути дела. Хотя, конечно, прикольная эдак игра у нас получается) Текстовая)
Рад, что сам процесс доставляет удовольствие участникам. Вот сам код для тех, кому не лениво читать. Можно в принципе даже откомпилировать, только какую-нибудь битмапку передать в конструктор нужно:

Код AS3:
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;
				}
			}	
		}
	}
}
Цитата:
Сообщение от ZackMercury Посмотреть сообщение
Код AS3:
 
iconContainer.addChild(icon);
iconContainer.x = stage.stageWidth/2;
iconContainer.y = stage.stageHeight/2;
icon.x = -icon.width/2;
icon.y = -icon.height/2;
Вот вам рабочий код, всё происходит относительно центра иконки.
Спасибо. Код сейчас попробуем в деле. Но вот вопрос, будет ли всё нормально работать, если контейнер будет добавлен как child не в центр родительского объекта, а в другое место?

[offtopic] Вижу мне многие на "вы" пишут. То, что в ответ всем шпарю на "ты" просьба не считать неуважухой и панибратством. Всего лишь "олдскульные" представления о сетевом этикете...

Старый 23.11.2017, 18:41
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 43  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
Вижу мне многие на "вы" пишут.
Я вообще не парюсь, просто привычка
Цитата:
будет ли всё нормально работать, если контейнер будет добавлен как child не в центр родительского объекта, а в другое место?
Разумеется будет.
P.S. Судя по коду, вы масштабируете _iconPic вместо _iconCont.
__________________
There is no thing in this world that is not simple.

Старый 23.11.2017, 18:59
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 44  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Цитата:
Сообщение от ZackMercury Посмотреть сообщение
P.S. Судя по коду, вы масштабируете _iconPic вместо _iconCont.
Я уже и так, и эдак попробовал. Просто последний вариант привёл. И да, иконку специально для чистоты эксперимента беру квадратную.

Кстати, если к теории возвращаться, почему для равномерного увеличения требуется масштабировать контейнер? Ведь если он добавлен в качестве дочернего объекта, например, внутрь другого спрайта размером 100*100 пикс. в точку [0,0] - левый верхний угол, то и машстабироваться он, контейнер, будет относительно родительского объекта, то есть с перекосом вправо-вниз. А иконка, хранящаяся в этом контейнере, действительно не изменит своих пропорций, но будет увеличиваться в размере не равномерно во все стороны, а также вправо-вниз. Или я не прав? Собственно в этом проблема. Я, пожалуй, ошибся когда написал о нарушении пропорций. Надеюсь, сейчас суть вопроса прояснилась.

Старый 23.11.2017, 19:01
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 45  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Масштаб происходит не относительно родителя, а относительно центра объекта(который по умолчанию в левом верхнем углу любого объекта)
Но поместив середину иконки ровно в начало координат этого контейнера с помощью этого кода
Код AS3:
icon.x = -icon.width/2;
icon.y = -icon.height/2;
мы будем масштабировать относительно центра иконки.
__________________
There is no thing in this world that is not simple.

Старый 23.11.2017, 19:31
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 46  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
только я вижу картинку на второй странице?

Добавлено через 8 минут
Цитата:
то есть с перекосом вправо-вниз
вправо и вниз будут растягиваться положительные оси. А отрицательные — влево и вверх. Так что вправо-вниз вытянется только одна четверть вашей иконки, остальное — в обратные стороны. "ОТ ЦЕНТРА". Смысл только в том простом факте, чтобы центр изображения совпадал с центром системы координат, которая масштабируется. А по-умолчанию он всегда в топлефте, а не в центре. Во Flash IDE можно задать центр ("точку привязки") руками, но в коде такой возможности нет — вы можете только сместить контент в отрицательные координаты, и тогда при масштабировании он будет растягиваться вместе с осями во все 4 стороны, а не только в положительной четверти.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 23.11.2017 в 19:43.
Старый 23.11.2017, 23:35
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 47  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Всё, разобрался. У меня на сцене было порядочное нагромождение компонентов, я среди них запутался. Какие-то оказались отцентрованы, какие-то нет, в общем, каша и оливье. Спокойно по очереди все проверил, центры совместил, всё заработало как надо. Спасибо всем, кто откликнулся.

Добавлено через 11 минут
Ещё хотел спросить. Если иконка должна "моргнуть", а затем исчезнуть, то просто поставить подряд заруск метода blink() и removeChild не работает, т.к. иконка сразу же исчезает, не успев завершить свою анимацию. Значит, нужно дождаться её окончания. Есть стандартное событие "из коробки", которое диспатчится по завершении анимации? Или самому ваять?

Старый 24.11.2017, 00:39
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 48  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Ну так у вас же анимация рукодельная Когда вы сами решите, что она закончилась, так и диспатчите событие.
__________________
There is no thing in this world that is not simple.

Старый 24.11.2017, 05:55
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 49  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от undefined Посмотреть сообщение
Гы,я думал эту инструкцию еще в as2 выпилили
Если писать в FD, то удобства от этой конструкции ноль, ибо автодополнение в ней не поддерживается)
__________________
Ко мне можно и нужно обращаться на ты)

Старый 24.11.2017, 17:06
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 50  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
А подскажите ещё, пожалуйста. Если мы дожидаемся окончания анимации перед тем, как убрать компонент, то понятно, что его родитель подписывается на соответствующее событие: _icon.addeventlistener(). Вопрос такой. Можно ли прямо в приёмнике прописать removeChild или нужно непременно создавать отдельный приватный метод, который будет обрабатывать событие? Если можно, то как правильно выглядит синтаксис? Спасибо.

Создать новую тему Ответ Часовой пояс GMT +4, время: 11:16.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 11:16.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.