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

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

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

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

Старый 30.03.2012, 20:21
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 32  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
Всего одновременно в мире находится около 3500 уникальных вещей.
Ну и? Пусть у каждой вещи 10 характеристик типа int. Это все займет (3500 * 10 * 4) = (150 000). Это 150 килобайт всего. Это как раз без изобретения отдельных "свойств", с отдельными "свойствами" памяти будет больше потребляться. Как будто 150Кб - это много. У вас несколько распакованных картинок столько памяти займут...

И это при том, что инвентарь чужой можно и не хранить. LOD здесь прекрасно действует. При попадании рейнджера в область видимости на основании его рассы/класса/уровня ему можно примерно сгенерировать инвентарь. И вы никак не отличите сегнерированный инвентать от "наторгованного". А уж магазины на планетах точно генерируют инвентарь при посещении (возможно - при посещении звездной системы).

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

Регистрация: Feb 2012
Сообщений: 36
"Вы ему про Фому,а он вам про Ерёму! Топикстартер видимо хочет реальный живой мир где характеристики сущностей случайно не генерируются когда попадают в зону влияния, а вы ему LOD предлагаете. В тех же КР2 корабли случайно генерируются на планетах вместе с оборудованием и дальше уже летают по вселенной и наличие поблизости игрока на них никак не влияет. Кстати оборудование в магазинах генерируется случайно, но не во время посещения игроком планеты, а каждый игровой цикл и реально присутствует на планете.

Кстати, господин Wolsh дал очень точное определение:
Цитата:
Сообщение от Wolsh Посмотреть сообщение
...представляете игру как огромную вселенную с постоянной и равномерной плотностью объектов и событий. ...
В КР2 на другом конце галактики, на планете появляется случайно сгенерированный пират, вылетает и сбивает торговца, летящего продавать купленный в соседней системе товар. Пират может заменить свое оборудование на оборудование торговца если оно выпало во время его уничтожения, может собрать товар и продать его на планете и т.п. В этом и была вся фишка, игрок живет по тем же законам, что и все в этом мире и если игрока убрать мир продолжит существовать.

PlutDem
В КР2 была очень простая механика и никакой физики, да к тому же пошаговая. Если Ваш проект с физикой и в реальном времени, то придется удаленный бой просчитывать приблизительно т.е.:
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Исход боя может решаться вообще сравнением всего двух характеристик.
Это практикуется в космосиме серии X3:Reunion, правда там эти приблизительные расчеты часто врут и из за этого не так интересно как в КР2.
Но в любом случае тысячи кораблей AS3 не потянет, можно конечно сделать несколько сотен и в случае если проект выстрелит портировать уже на другую платформу.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Топикстартер видимо хочет реальный живой мир где характеристики сущностей случайно не генерируются когда попадают в зону влияния
А мы вот все о том, что это абсолютно бессмысленно, занимать память нестреляющими ружьями.
Я ни одной игры кроме пятнашек и паззла в жизни не написал, так что все что я говорю можно смело делить на 16. Я обычной логикой оперирую.
Если нет суслика, пофиг сколько у него зубов и какого оттенка шкурка.
Как я вижу процесс:
При запуске игры с жесткого диска считывается последнее сохранение и создается временный (возможно, "распакованный", сейв, с которым игра общается пока юзер не выберет в меню "сохранить" (старыйй сейв естественно не подлежит модификации в процессе игры, он для истории): в случае этих ваших КР берем из сейва координаты и векторы кораблей, включаем жизнь, полетели. Никакие ништяки в слотах кораблей нас не интересуют в это время, и считывать их из сейва нет никакой необходимости.
Событие – два корабля встретились. Берем из сейва их характеристики. Если корабли дружественные, запускаем процесс торговли, если враждебные – процесс битвы. Торговля это передача от одного корабля другому случайной части ништяков на сумму не больше 75% от количества денег второй стороны. Можно усложнять интеллект как угодно в разумных пределах, делать списки приоритетов из необходимостей (скажем если у одного мало топлива то он обязательно покупает топливо, и немного зубного порошка прицепом) – я не думаю что такие события будут происходить по 10 штук на кадр, иначе самым расхожим товаром будет краска для обшивки кораблей.
Поторговали, записали новые состояния слотов в сейв, очистили от них память и полетели дальше.
Аналогично с битвой. Никто же не требует от интеллекта игры реального сражения (если конечно ГГ не является его свидетелем). Сравнили боевую мощь, разбавили случайностью, сгенерировали списки повреждений и затрат боеприпасов, записали в сейв и разлетелись; либо поверженный корабль захвачен, часть груза в соответствии с приоритетами и грузоподъемностью судна победителей отобрана у побежденных, записали слоты в сейв и разлетелись.
И как уже несколько раз сказали, все эти слоты, о которых был изначальный вопрос – ничто по ресурсам в сравнении с графикой и логикой. Но вам всеравно придется делать LOD для графики, таскать картинки кораблей, которые никто не видит – это же жесть вообще. А они ведь такие же свойства. Вам придется разграничивать свойства, необходимые для простого интеллекта "оно где-то там летает", от свойств "о боже, оно летит прямо на меня!"
__________________
Reality.getBounds(this);

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

Регистрация: Feb 2012
Сообщений: 212
Цитата:
Сообщение от Wolsh Посмотреть сообщение
При запуске игры с жесткого диска считывается последнее сохранение и создается временный (возможно, "распакованный", сейв, с которым игра общается
Вот отсюда можно поподробнее? Что из себя представляет сейв? Shared Object? Что имеется в виду под "распакованный"?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Shared Object конечно, ФП другого не умеет.
"Распакованный" значит, что сохранение на жестком диске может храниться в сжатом виде, а для общения в процессе игры можно создать развернутую структурированную копию, более удобную для доступа к частям сейва. Можно создать полсотни отдельных SO "по темам". По окончании игры их можно просто удалить. При нормальном новом сохранении игры (от юзера) на их основе создается новый сейв, сжимается и сохраняется в один SO, имя и дата которого регистрируются в "самом главном SO" – списке всех сейвов. Когда игра запускается и игрок выбирает "загрузить", игра обращается к этому главному списку и предоставляет игроку список сейвов с именами, датами, может еще какими данными, хоть картинками)) Игрок выбирает, какое сохранение он хочет загрузить, игра обращается к этому сейву по имени из списка, распаковывает его во временные SO и формирует мир.

Добавлено через 9 минут
вот как-то выдумывал
__________________
Reality.getBounds(this);

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

Регистрация: Feb 2012
Сообщений: 212
Кажется, я все таки нашел способ снизить потребляемую предметами память! В базовом классе Item прописываем геттеры на все возможные характеристики, а через декоратор добавляем нужные бонусы и храним их значения в свойствах. Таким образом предмет хранит в себе только те свойства характеристик к которым есть бонус, а на все остальное возвращает ноль. К сожалению, не знаю как измерить занимаемую всей этой конструкцией память, но наверняка это лучше чем 25 элементный массив.
Код AS3:
public class Main extends Sprite {
 
		public function Main():void {
 
			var person:Person= new Person(0,10,5)
 
			var hat:IItem = new Item("Magic hat");
			hat = new StrenghtUpgrade(hat, 58);
			hat = new DexterityUpgrade(hat, 15);
 
			person.wearItem(hat);
 
		}
 
	}
Код AS3:
public class Person extends Sprite{
 
		public var strength:int;
		public var dexterity:int;
		public var stamina:int;
 
		public function Person(strength:int,dexterity:int,stamina:int) {
 
			this.strength = strength;
			this.dexterity = dexterity;
			this.stamina = stamina;
		}
		public function wearItem(item:IItem):void {
			this.strength+=item.strength;
			this.dexterity+=item.dexterity;
			this.stamina+=item.stamina;
		}
	}
Код AS3:
public interface ISkills {
 
		function get strength():int;
		function get dexterity():int;
		function get stamina():int;
 
	}
Код AS3:
public interface IItem extends ISkills{
 
		function get name():String;
	}
Код AS3:
public class Item implements IItem{
 
		protected var _name:String;
 
		public function Item(name:String){
			this._name = name;
		}
 
		public function get strength():int {
			return 0;
		}
		public function get dexterity():int {
			return 0;
		}
		public function get stamina():int {
			return 0;
		}
		public function get name():String {
			return _name;
		}
	}
Код AS3:
public class ItemDecorator implements IItem{
 
		protected var _item:IItem;
 
		public function ItemDecorator(item:IItem){
 
			this._item = item;
		}
 
		public function get strength():int {
 
			return _item.strength;
		}
 
		public function get dexterity():int {
 
			return _item.dexterity;
		}
 
		public function get stamina():int {
 
			return _item.stamina;
		}
 
		public function get name():String {
 
			return _item.name;
		}
	}
Код AS3:
public class StrenghtUpgrade extends ItemDecorator{
 
		protected var _strength:int;
 
		public function StrenghtUpgrade(item:IItem,value:int) {
			super(item);
			this._strength = value;
		}
		override public function get strength():int {
			return super.strength + this._strength;
		}
	}
Правда если захотеть 2 раза проапгрейдить вещь на один и тот же бонус, то в результате будут храниться два свойства на каждый апгрейд, но думаю это можно как нибудь решить.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
getSize.
__________________
משיח לא בא
משיח גם לא מטלפן

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

Регистрация: Feb 2012
Сообщений: 212
alatar
getSize измерит сам объект но, проигнорирует свойства имеющие ссылки на другие объекты, т.е. скажем, getSize измерит размер массива, но не учтет содержимое его ячеек. Хотелось бы что то более надежное и комплексное. Вроде можно измерить с помощью Sampler, но в справке как то все мутно расписано.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Мне вот до сих пор непонятна одна тема в Декораторе. Стыдно, да, но почему-то все описания паттерна молчат об этом.
Вот декорировал ты себя шапкой +50 к мане.
А как теперь эту шапку снять? Особенно если потом еще сапоги нацепил.
А еще круче – хлебнул ты Зелье Силы и стамина подскочила на 75 децелов. Но действует только 1 минуту. И что делать с этим декоратором через минуту? Как от него избавиться?
Поясните кто-нибудь пожалуйста.
__________________
Reality.getBounds(this);

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

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

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


 


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


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