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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.02.2015, 16:11
a7s1h1 вне форума Посмотреть профиль Отправить личное сообщение для a7s1h1 Найти все сообщения от a7s1h1
  № 1  
Ответить с цитированием
a7s1h1

Регистрация: Oct 2013
Сообщений: 126
По умолчанию эффект отравления юнита

Здравствуйте!
Хочу сделать так, что при отравлении юнит становится зеленоватым. Когда отравление проходит - опять становится нормальным. Вот варианты, которые рассмотрел или попробовал:
1. Рисовать анимацию отдельно для отравленного состояния.
Почему не стал использовать: плохой вариант, увеличивает вдвое количество статусов у юнита в коде и количество анимаций в библиотеке

2. Менять цвет юнита.
Пробовал менять цвет так:
Код AS3:
ct:ColorTransform = new ColorTransform;
ct.color = 0x00FF00;
transform.colorTransform = ct;
Тот же код при "выздоровлении", но цвет меняется на белый.
Почему не получилось: цвета меняются у всего мувика, т.е. остаётся один силуэт заданного цвета. Установка белого цвета просто меняет цвет на белый, а не обнуляет раскрашивае (впрочем, это было ожидаемо)

3. Наложить маску.
При создании юнита (со свойством private var poisonMask:Shape) добавил
Код AS3:
// индикация отравления
_poisonMask = new Shape();
_poisonMask.graphics.beginFill(0x00FF00, .5);
_poisonMask.graphics.drawRect(0, 0, width, height);
_poisonMask.graphics.endFill;
_poisonMask.cacheAsBitmap = true;
mask = null // убираем маску
При отравлении:
Код AS3:
mask = _poisonMask; //применяем маску
Почему не получилось: При отравлении юнит вообще становится невидимым, а после "выздоровления" снова появляется. Чую, что вообще не правильно понимаю, что такое маска...

Подскажите, пожалуйста, как можно "слегка зеленить" юнита (с несколькими анимациями), и, соответственно, "снимать" эту зелень? Хотя бы намекните, при помощи какого инструмента это можно делать.

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

Регистрация: Dec 2014
Сообщений: 312
Используй greenMultiplier или greenOffset у ColorTransform.

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

Регистрация: Apr 2009
Сообщений: 409
Можете посомтреть в сторону tweeLite. там это все легко делать через colorTransform . Ну а вообще не знаю чем вас смущает количество статусов. правильное решение - использовать автомат состояний. Иначе быстро запутаетесь . Ну и если типов юнитов много, надо подумать о правильном наследовании. Но это так, оффтопик

Старый 06.02.2015, 18:31
a7s1h1 вне форума Посмотреть профиль Отправить личное сообщение для a7s1h1 Найти все сообщения от a7s1h1
  № 4  
Ответить с цитированием
a7s1h1

Регистрация: Oct 2013
Сообщений: 126
Цитата:
Сообщение от faraday Посмотреть сообщение
Можете посомтреть в сторону tweeLite. там это все легко делать через colorTransform . Ну а вообще не знаю чем вас смущает количество статусов. правильное решение - использовать автомат состояний. Иначе быстро запутаетесь . Ну и если типов юнитов много, надо подумать о правильном наследовании. Но это так, оффтопик
Ради такого пустяка не хочется использовать твинер. А статусы у меня и так есть: от них зависит и поведение, и анимация. И количество статусов меня совершенно не смущает, чего не скажешь про количество анимаций: так как для каждого статуса своя анимация, то рисования отдельной анимации для каждого статуса, но в отравленном состоянии как раз увеличило бы количество анимаций вдвое. Зачем такие муки, если можно перекрасить программно, правильно?

Цитата:
Сообщение от callme Посмотреть сообщение
Используй greenMultiplier или greenOffset у ColorTransform.
Спасибо большое, то, что надо! Вот, что получилось (может, кому пригодится):
Свойство юнита:
Код AS3:
private var _defaultColor:ColorTransform; // цвет по умолчанию
Теперь, чтобы озеленить юнита, пишу poisonColor(); чтобы снять озеленение - poisonColor(false).
А вот сам метод:
Код AS3:
/**
* 
* Установка и отмена цвета отравления
* 
* @param	green озеленять или нет, по умолчанию - да
*/
private function poisonColor(green:Boolean = true):void {
	if (green) {
		var newColorTransform:ColorTransform = transform.colorTransform; // отталкиваемся от цвета по умолчанию
		newColorTransform.color = 0x00FF00; // зелёный
		newColorTransform.greenMultiplier = 1; // зелёность зелёного цвета не меняется
		newColorTransform.greenOffset = .5; // прозрачность зелёного
		transform.colorTransform = newColorTransform; // применяем новый цвет
	} else {
		transform.colorTransform = _defaultColor;// возвращаем исходный цвет
	}
}
Метод не универсален, но для моих целей подходит вполне. Хотя предложения по чистоте и оптимизации кода приветствуются.

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
А я использовал силиновский ColorAdjust. Соответственно для выздоровления - фильтр убираем.
http://silin.su/#AS3/filters/color
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

Регистрация: Oct 2013
Сообщений: 126
Цитата:
Сообщение от GBee Посмотреть сообщение
А я использовал силиновский ColorAdjust. Соответственно для выздоровления - фильтр убираем.http://silin.su/#AS3/filters/color
да, на silin.su вообще очень много всего полезного, я тоже поначалу туда сунулся, но целый класс ради такого пустяка, как окраска юнита в конкретный момент в конкретный цвет, приплетать не хотелось

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

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

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


 


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


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