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

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

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
_character = new Character(false, false, true); // (hasHand:Boolean, hasEye:Boolean, hasKnife:Boolean)
_enemy = new Character(true, true, false);
 
var action:XML = 
	<action id="000001" name="Ударить ножом в глаз">
		<condition owner="self" prop="hasHand" value="true"/>
		<condition owner="self" prop="hasKnife" value="true"/>
		<condition owner="enemy" prop="hasEye" value="true"/>
		<condition owner="weather" prop="isNight" value="false"/>
	</action>;
 
var selfConditions:XMLList = action.condition.(@owner=="self");
var enemyConditions:XMLList = action.condition.(@owner=="enemy");
 
for each(var cond:XML in selfConditions)
{
	if (_character[cond.@prop] == cond.@value) trace("pers", cond.@prop, "-- yes");
	else trace("pers", cond.@prop, "-- no");
}
 
for each(var condE:XML in enemyConditions)
{
	if (_enemy[condE.@prop] == condE.@value) trace("enemy", condE.@prop, "-- yes");
	else trace("enemy", condE.@prop, "-- no");
}
pers hasHand -- no
pers hasKnife -- yes
enemy hasEye -- yes
__________________
Reality.getBounds(this);

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

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

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код:
<condition owner="self" mode="range" prop="level" min="12" max="80"/>
__________________
Reality.getBounds(this);

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

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

Добавлено через 26 минут
Единственное, у меня какое-то в этом контексте отторжение вызывает XML. В том плане, что, например, файлы с фразами на нужном языке - это данные "внешние" по отношению к программе. А условия доступности действий - самые что ни на есть "потроха", которые неохота "подцеплять сбоку".

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
			_character = new Character(true, false, true); // (hasHand:Boolean, hasEye:Boolean, hasKnife:Boolean)
			_enemy = new Character(true, true, false);
 
			var action:Object =
			{
				id:"000001",
				name:"Ударить ножом в глаз",
				conditions:
				[
					{owner:"self", prop:"hasHand", value:true},
					{owner:"self", prop:"hasKnife", value:true},
					{owner:"enemy", prop:"hasEye", value:true},
					{owner:"weather", prop:"isNight", value:false}
				]	
			}
 
			var enabled:Boolean = true;
 
			for each(var cond:Object in action.conditions)
			{
				switch (cond.owner)
				{
					case "self" : if (_character[cond.prop] != cond.value) enabled = false;
					break;
					case "enemy" : if (_enemy[cond.prop] != cond.value) enabled = false;
					break;
				}	
			}
 
			trace(action.name, enabled ? "можно" : "нельзя");
__________________
Reality.getBounds(this);

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

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Спасибо, wolsh. Просто репозиторий какой-то мне устроил Возьму за основу.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
И да, если принять во внимание что это действительно фактически основные для игры данные, наверное есть смысл сделать класс для "действия", а может даже и класс для "условия", чтобы не оформлять эту красоту в каких-то безродных обжектах. А там, глядишь, еще и методы какие-то завести можно будет, типа action.test(_character); Ну, или, я не знаю.. статический класс ActionManager с методом getEnabledActions, возвращающий массив (вектор) всех доступных экземпляров Action.. Только ему (методу) придется давать ссылки на всех возможных owner'ов.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 13.11.2017 в 20:28.
Старый 13.11.2017, 23:33
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 48  
Ответить с цитированием
Appleman
 
Аватар для Appleman

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

Добавлено через 61 час 26 минут
Друзья, подскажите ещё такой момент по проектированию. Я начал программировать свою мини-игру (которая в перспективе будет частью более крупного проекта) и столкнулся с появлением приличного количества свойств персонажей, которые по факту существуют и используются только в данной мини-игре, и совершенно не нужны за её пределами. Пока я все эти свойства заношу в класс Character, от которого наследуются все игровые персонажи. Но чем больше новых свойств создаётся, тем больше я сомневаюсь в правильности таких действий.

Собственно, вопрос, как посоветуете лучше сделать: продолжать добивать такие свойства в основной класс или создать новый класс, например, CharacterBattle, куда экземпляр Chatacter будет включён методом композиции и экземпляр которого будет создаваться при запуске мини-игры, и уже в него добавлять нужные свойства?

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

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Код AS3:
			var action:Object =
			{
				id:"000001",
				name:"Ударить ножом в глаз",
				conditions:
				[
					{owner:"self", prop:"hasHand", value:true},
					{owner:"self", prop:"hasKnife", value:true},
					{owner:"enemy", prop:"hasEye", value:true},
					{owner:"weather", prop:"isNight", value:false}
				]	
			}
Почти закончил программировать View, расставил всё на экране по местам, завязал на обновление модели. Скоро перехожу к core-геймплею. В связи с этим вернулся к вопросу формулировки условий. Метод, предложенный wolsh-ем, понятен и его работа вопросов не вызывает. Кроме одного. Сейчас все строчки условий связаны логическим "И". А как быть, если в какой-то строке появляется "ИЛИ"? То есть например, или ночь, или герой - гном Ситуация вполне типичная. Пока мне придумался только массив из обжектов в каждой строке, которые потом будут разбираться парсером. Но это слегка громоздко. Есть альтернативные мысли? Спасибо.

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

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

Затык возник на моменте перехода к практике. Конечная цель - формирование 2-уровневого меню действий (т.к. их много и они сгруппированы), отобранных по записанным в них критериям. Меню выводится на стадии, называемой "interstate". Это промежуточное состояние, в которое система приходит после обработки и расчёта результатов предыдущего действия и до момента выбора игроком нового.

Из соседней темы про MVC понятно, что подготовкой перечня доступных действий занимается Модель. Мне пока видится класс, содержащий инфо о том, какие действия в какие группы распихивать. Плюс какием-то образом "пробежать" их все, подставляя экземпляры игрока и противника, и оценивая выполнение условий. Пожалуй, и всё, что приходит в голову.

Напишите, плиз, ваше видение, как мне решить задачу. Причём даже не на уровне кода, а на уровне описания архитектуры и взаимодействия. Спасибо.

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

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

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


 


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


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