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

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

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

Регистрация: Oct 2006
Сообщений: 2,281
ну да,в случае поворота это, вообще говоря, не будет scaleX/Y

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

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Если у иконки есть свой класс, то замечательно, он уже контейнер? Значит КАРТИНКУ ставим в такие координаты, чтобы ее центр был в (0, 0).
Тут надо напомнить, что такое Спрайт. У него нет никакого физического смысла, только геометрический. Это просто система координат. И когда ты масштабируешь спрайт, ты растягиваешь или сжимаешь его систему координат. При этом его (0, 0) остается на месте относительно родительской системы координат, то есть точка (0, 0) никуда не сдвигается, но оси растягиваются или сжимаются. Если картинка будет установлена так как я сказал, она тоже не будет никуда смещаться, а только растягиваться или сжиматься, оставаясь своим центром в точке (0, 0).
Ничего не вышло Беда в том, что самих иконок пока нет. Я думал создать класс с визуальными эффектами, чтобы потом можно было любой объект от него унаследовать, тем самым сделав все эти эффекты доступными. Поэтому у меня класс, расширяющий Sprite, с пустым конструктором и набором методов типа blink(). Если я включаю некий контейнер в этот класс, типа _iconCont:Sprite, то как классы-наследники смогут туда потом помещать содержимое?

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
Если я включаю некий контейнер в этот класс, типа _iconCont:Sprite, то как классы-наследники смогут туда потом помещать содержимое?
А для чего по вашему вообще наследование придумали? Но нужно сделать _iconCont protected.
Код AS3:
_iconCont.addChild(...);
Вообще обычно делают функциональные объекты, т.е. классы, которые выполняют какую-то определённую роль. Например, окно, имеющее крестик и палочку для закрытия и сворачивания, диалоговое окно наследуется от окна и имеет некоторое изображение, управляет своим размером, сообщение и кнопки, ну и т.д.
Но никак не классы для наследования от них визуальных эффектов.
А эффекты вешаются на конкретный класс, выполняющий конкретную задачу. Например, захотели вы, чтобы ваше окно при закрытии выполняло анимацию масштабирование + выцветание, вы добавляете этот функционал в класс окна.

Хотя зависит от задачи, конечно.
__________________
There is no thing in this world that is not simple.

Старый 21.11.2017, 17:07
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 34  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
Ничего не вышло Беда в том, что самих иконок пока нет.
Подписывайся у _iconCont на событие ADDED и как только наследники добавили что-то в контейнер,выставляй тому,что добавили нужные координаты(чтоб 0,0 в _iconCont совпадала с центром добавленного контента)

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Мне, честно говоря, больше нравилась идея "статического" класса-менеджераЭффектов, чем наследование какого-то специального дисплейного класса, умеющего моргать.
Как это можно организовать, стоило посмотреть одним глазком на TweenMax или TweenLite.
Кто помнит — синтаксис там выглядит довольно просто: TweenLite.to(oject, params);
То есть у статического класса вызывается метод to(), которому отдается ссылка на управляемый объект и параметры [трансформации] (в том числе константа, указывающая на функцию трансформации).
Как уже отмечали выше, статический класс не сможет "вести" одновременно несколько объектов, и TweenLite решает эту проблему элегантно: он создает индивидуальный ЭКЗЕМПЛЯР для каждого твина, и этот экземпляр обособленно ведет весь жизненный цикл запрошенной трансформации. Статический класс здесь выступает в роли фасада. Не будь у гринсоков столько вариантов функций, они бы запихали их прямо в фасад под статические константы для удобства и простоты синтаксиса. Для своего небольшого класса с 5-6 эффектами я бы так и сделал, чтоб не городить целую библиотеку классов.
__________________
Reality.getBounds(this);

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

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Ребята, может быть я совсем деревянный, но у меня всё равно какая-то лажа с центровкой дочерних объектов. Я уже забил на все эти моргания, решив, что наверное правильнее не лениться и освоить специально созданные для этого инструменты типа Tween-ов. Но чтоб добро не пропадало, ограничил свой "моргающий" класс обычной Bitmap-иконкой. Добавил контейнер, отцентрировал его относительно this. И всё равно иконка смещается при масштабировании. Вот смотрите:
Код AS3:
private var _iconCont: Sprite = new Sprite;
private var _iconPic: Bitmap;
 
public function BitmapIcon(iconPic: Bitmap) 
		{
			this.addChild (_iconCont);
			_iconPic = iconPic;
 
			_iconCont.addChild(_iconPic);
			_iconPic.x = - _iconPic.width / 2;
			_iconPic.y = - _iconPic.height / 2;
 
		}
Один фиг, что контейнер дёргаю, что _iconPic, всё равно хотя бы чуть-чуть, но "едет". Что я делаю не так?

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

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

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

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

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

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
Appleman вы напишите полный код уже, который делает дела - и тот, который добавляет картинку, и тот, который её скаллирует, и тот, который добавляет листенеры и вообще весь, который относится к сути дела. Хотя, конечно, прикольная эдак игра у нас получается) Текстовая)
__________________
while(live()) { hope(); }

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Код AS3:
var iconContainer:Sprite = new Sprite();
addChild(iconContainer);
var icon:Shape = new Shape();
with(icon.graphics)
{
	beginFill(0xff9922);
	drawRoundRect(0, 0, 50, 50, 10, 10);
}
 
iconContainer.addChild(icon);
iconContainer.x = stage.stageWidth/2;
iconContainer.y = stage.stageHeight/2;
icon.x = -icon.width/2;
icon.y = -icon.height/2;
 
iconContainer.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void
{
	var _this:DisplayObjectContainer = e.currentTarget as DisplayObjectContainer;
	_this.scaleX = _this.scaleY = 1.5;
});
 
iconContainer.addEventListener(MouseEvent.MOUSE_UP, function(e:MouseEvent):void
{
	var _this:DisplayObjectContainer = e.currentTarget as DisplayObjectContainer;
	_this.scaleX = _this.scaleY = 1;
});
Вот вам рабочий код, всё происходит относительно центра иконки.

Код для Adobe Flash
Код AS3:
import fl.transitions.Tween;
import fl.transitions.easing.Elastic;
 
var iconContainer:Sprite = new Sprite();
addChild(iconContainer);
var icon:Shape = new Shape();
with(icon.graphics)
{
	beginFill(0xff9922);
	drawRoundRect(0, 0, 50, 50, 10, 10);
}
 
iconContainer.addChild(icon);
iconContainer.x = stage.stageWidth/2;
iconContainer.y = stage.stageHeight/2;
icon.x = -icon.width/2;
icon.y = -icon.height/2;
 
iconContainer.addEventListener(MouseEvent.ROLL_OVER, function(e:MouseEvent):void //mouse over
{
	var tween:Tween = new Tween(iconContainer, "scaleX", Elastic.easeOut, 1, 1.5, 0.6, true);
	tween = new Tween(iconContainer, "scaleY", Elastic.easeOut, 1, 1.5, 0.6, true);
});
 
iconContainer.addEventListener(MouseEvent.ROLL_OUT, function(e:MouseEvent):void //mouse out
{
	tween = new Tween(iconContainer, "scaleX", Elastic.easeOut, 1.5, 1, 0.6, true);
	tween = new Tween(iconContainer, "scaleY", Elastic.easeOut, 1.5, 1, 0.6, true);
});
demo.swf   (3.0 Кб)
Вложения
Тип файла: swf demo.swf (3.0 Кб, 60 просмотров)
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 23.11.2017 в 12:49.
Создать новую тему Ответ Часовой пояс GMT +4, время: 11:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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