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

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

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

Регистрация: Feb 2012
Сообщений: 212
Wolsh
Код AS3:
    (персонаж)
  ( (персонаж) +50 стамины )// надел шапку
( ( (персонаж) +50 стамины ) -50 стамины)// снял шапку
Тоже этот вопрос интересует.
P.S. Если это камень в мой эээ... код, то у меня декоратор используется только для создания шмота.


Последний раз редактировалось PlutDem; 09.04.2012 в 23:57.
Старый 09.04.2012, 23:55
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Не не, по Вашему коду персонаж то не декорируется, он именно "применяет шапку", а не "становится шапкой".
По Вашему коду мой вопрос скорее касается самой шапки. Как с нее "снять" зачарование, убрать один из декораторов.

Цитата:
но думаю это можно как нибудь решить.
Код AS3:
override public function get strength():int {
	return item.strength + this._strength;
}
?

Добавлено через 19 минут
Если хотите камней, то их есть у меня.
Шапка hat это экземпляр Item, так?
У Item есть свойства strength, stamina и т.д.?
Вопрос – чем ваше декорирование лучше прямой установки?
Код AS3:
var hat:IItem = new Item("Magic hat");
hat.stamina += 50;
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 10.04.2012 в 00:17.
Старый 10.04.2012, 00:43
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 3  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
Цитата:
Сообщение от Wolsh Посмотреть сообщение
По Вашему коду мой вопрос скорее касается самой шапки. Как с нее "снять" зачарование, убрать один из декораторов.
Я могу предложить только быдло-способ, загасить эффект ненужного декоратора другим декоратором либо создать новый объект с текущими декораторами кроме ненужного.
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Код AS3:
override public function get strength():int {
	return item.strength + this._strength;
}
?
Посмотрите внимательнее на декоратор. У каждого из них есть свойство для хранения значения прибавляемого бонуса. Т. е. если применить к вещи 2 декоратора силы +5 и +10, то в памяти будут хранится эти два свойства со значениями 5 и 10. Если увлечься такими апгрейдами, то в конце концов объект вещи разжиреет.
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Если хотите камней, то их есть у меня.
Шапка hat это экземпляр Item, так?
У Item есть свойства strength, stamina и т.д.?
Вопрос – чем ваше декорирование лучше прямой установки?
Код AS3:
var hat:IItem = new Item("Magic hat");
hat.stamina += 50;
У Item нет свойств, только геттеры. Свойство для хранения значения бонуса добавляет декоратор, в этом то вся и фишка. Если правильно понимаю, то во эта конструкция будет существовать в единственном экземпляре для всех объектов класса.
Код AS3:
public function get armor():int {
			return 12;
		}
P.S. Вопрос про измерение памяти все еще в силе, если эта белиберда сэкономит 5% памяти, то ну его нафиг.


Последний раз редактировалось PlutDem; 10.04.2012 в 00:49.
Старый 10.04.2012, 00:26
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Но действует только 1 минуту. И что делать с этим декоратором через минуту? Как от него избавиться?
Ну как нацепил так и снял. Декоратор не должен менять свойства объекта, он просто возвращает базовое
значение + бонус.
PlutDem, возьмите уже наконец любой профайлер и посмотрите сколько ресурсов потребляет ваше приложение.
__________________
משיח לא בא
משיח גם לא מטלפן


Последний раз редактировалось alatar; 10.04.2012 в 00:28.
Старый 10.04.2012, 00:36
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вот мне и непонятно. Технически.
Нацепил-то я вот так
Код AS3:
var hat:IItem = new Item("Magic hat");
hat = new StrenghtUpgrade(hat, 58);
hat = new DexterityUpgrade(hat, 15);
Как теперь "снять" например StrenghtUpgrade и оставить DexterityUpgrade?
__________________
Reality.getBounds(this);

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Вот мне и непонятно. Технически.
Нацепил-то я вот так
Код AS3:
var hat:IItem = new Item("Magic hat");
hat = new StrenghtUpgrade(hat, 58);
hat = new DexterityUpgrade(hat, 15);
Как теперь "снять" например StrenghtUpgrade и оставить DexterityUpgrade?
Это как удалить элемент в однонаправленном списке. В видео декораторы используются для апгрейдов, они в принципе не снимаемые. Нужна реализация с доступом к декорируемому объекту.
__________________
משיח לא בא
משיח גם לא מטלפן

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
(да, проглядел, что Вы возвращаете константы, не храня их в переменных)
Цитата:
Если увлечься такими апгрейдами, то в конце концов объект вещи разжиреет.
Цитата:
в этом то вся и фишка.
15 наслоений полного комплекта углубляющихся геттеров легче одной переменной?
Ведь для изменения одного (не побоюсь этого слова) свойства декоратором Вам надо нагрузить предмет полным комплектом всех геттеров, цепляющихся к прошлым геттерам.
Вы так рассчитываете сэкономить память и увеличить быстродействие?
Вопрос "чем ваше декорирование лучше прямой установки?" всё ещё в силе. Ответа не было.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 10.04.2012 в 01:30.
Старый 10.04.2012, 02:02
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 8  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
Цитата:
Сообщение от Wolsh Посмотреть сообщение
15 наслоений полного комплекта углубляющихся геттеров легче одной переменной?
Ведь для изменения одного (не побоюсь этого слова) свойства декоратором Вам надо нагрузить предмет полным комплектом всех геттеров, цепляющихся к прошлым геттерам.
Вы так рассчитываете сэкономить память и увеличить быстродействие?
Вопрос "чем ваше декорирование лучше прямой установки?" всё ещё в силе. Ответа не было.
У большинства вещей по 2-3 бонуса к характеристикам. Держать в объекте 2-3 свойства лучше чем все 25. В среднем около 3-5 наслоений.

В любом случае, метод себя оправдал на жалких 10%
Проще держать в вещи все возможные свойства. К тому же от их количества зависит далеко не многое.
Код AS3:
public class Main extends Sprite {
 
		public function Main():void {
 
                        var items:Array = new Array();
			for (var i:int = 0; i < 200000; i++) {
				items[i] = new TestItem;
			}
 
		}
 
	}
Код AS3:
public class TestItem {
 
		public var testSkills:TestSkils = new TestSkils();
		public function TestItem() {
 
		}
 
	}
Код AS3:
public class TestSkils {
 
		public var ar_1:int =2;
		public var ar_2:int =2;
		public var ar_3:int =2;
		public var ar_4:int =2;
		public var ar_5:int =2;
		public var ar_6:int =2; 
		public var ar_7:int =2;
		public var ar_8:int =2; 
		public var ar_9:int =2; 
		public var ar_10:int =2; 
		public var ar_11:int =2;
		public var ar_12:int =2; 
		public var ar_13:int =2; 
		public var ar_14:int =2; 
		public var ar_15:int =2; 
		public var ar_16:int =2; 
		public var ar_17:int =2; 
		public var ar_18:int =2; 
		public var ar_19:int =2; 
		public var ar_20:int =2; 
		public var ar_21:int =2; 
		public var ar_22:int =2; 
		public var ar_23:int =2; 
		public var ar_24:int =2; 
 
		public function TestSkils() {
			}
 
	}
Всего потребляемой памяти: 9 256 Kb.
Если в TestSkils убрать все свойства кроме 3, то всего потребляемой памяти будет 8 776 Kb.
А если сделать так, то всего потребляемой памяти будет 4 624 Kb.
Код AS3:
public class Main extends Sprite {
 
		public function Main():void {
 
                        var items:Array = new Array();
			for (var i:int = 0; i < 200000; i++) {
				items[i] = 12;
			}
 
		}
 
	}
В общем, занимаюсь экономией на спичках

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
)) Вам это всю тему твердят. Рад что нашли способ убедиться.
__________________
Reality.getBounds(this);

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ага, но не о видео речь. Я не нашел (может проглядел) этого ни у GOF, ни в книге по паттернам в AS3.0
И мне всегда это казалось странным. Как в данной ситуации – ну нацеплять декораторов на шапку навсегда еще куда ни шло. Но если декорировать перса, то нужен этот самый доступ к списку декораторов, что ли, чтобы вытаскивать экземпляр "до" и навешивать на него заново все что "после" удаляемого декоратора. То есть сама по себе красивая идея превращается в кошмар программиста. Ну, программиста моего уровня по крайней мере))))
А насчет чем мне видео помогло – в нем показан декоратор на интерфейсах. А в книге по паттернам AS3 рассматривается декоратор на наследовании, и меня всегда ужасало, что каждый декоратор вынужден наследовать фактически декорируемый класс)))) Только после видео я въехал, что речь о "пустом" абстрактном суперклассе. И всеравно на интерфейсах мне как-то комфортней и понятней. За это прозрение и спасибо))
__________________
Reality.getBounds(this);

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

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

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


 


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


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