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

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

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Если экземпляр всего лишь хранит набор неизменных свойств, то вместо класса достаточно идентификатора и таблиц со свойствами по идентификатору — тем более, когда таких "классов" подразумевается 100500 и все они хранят более-менее одинаковый набор свойств.
По-моему мы говорим об одном и том же) Просто я не назвал это InventoryCharacterSlot
__________________
Ко мне можно и нужно обращаться на ты)

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

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 483
Цитата:
Сообщение от caseyryan Посмотреть сообщение
В чём тогда вопрос? Я целую схему написал, как это у меня работает
За схему респект, по коду всё понятно, на ус намотал. И да, на свой исходный вопрос твоё видение я получил. Просто из твоего ответа мне показалось, будто бы ты решил, что для каждого предмета я собираюсь делать по классу. Вот применительно к этому я написал о возможном непонимании с твоей стороны. Моя логика была (и пока остаётся), что создавая подклассы к общему классу предметов Items мы удачно разграничивает предметы по типам. И если у нас есть по одному предмету в руку, на голову и на ноги, то соответствующие "слоты" в классе персонажа - это свойства, относящиеся к тому или иному типу, ровно по одному для каждого.

И второй вопрос был в том, что если у нас планируется 5 разных конкретных шапок, то в моём понимании (пока последний пост Wolsh-а не прочитал), для каждой где-то должна фигурировать команда 'имя переменной':ItemHat = new ItemHat. И так 5 раз для наших пяти предметов. Потом для каждого задаём набор свойств. Я спрашивал, где конкретно всё это нужно прописывать. Чтобы в итоге в программе появилось 5 переменных, в каждой из которых содержалось бы по экземпляру класса ItemHat с различным набором свойств. А дальше с ними уже работать.

Или сам подход - ересь?

Цитата:
Экземпляр должен что-то делать. Нет смысла в экземпляре(!) хранить какие-то неизменные данные, для этого максимум хватит класса со статическими константами. Экземпляры нужны только тогда, когда у них есть индивидуальность, жизненный цикл с сохранением изменений свойств. Если экземпляр всего лишь хранит набор неизменных свойств, то вместо класса достаточно идентификатора и таблиц со свойствами по идентификатору — тем более, когда таких "классов" подразумевается 100500 и все они хранят более-менее одинаковый набор свойств.
Чёрт, а ведь и правда! Я не думал с этой точки зрения. Даже твои посты читая, лишь с третьего допёр, о чём речь И да, в нынешнем диздоке у всех предметов набор свойств неизменен на всём протяжении игры.

Но всё равно вижу 2 аргумента в пользу классов. Во-первых, наличие класса позволяет заложить основу для более сложного поведения, если по ходу разработки и тестирования будет понимание его необходимости, взять хотя бы тот самый износ предметов, о котором ты писал ранее. В случае с идентификаторам процесс отыгрывания назад может быть очень болезненным. И второе - это гарантия от того, что трусы не будут надеты на голову. Опять же твоя была мысль о предпочтении Strong-типизации, а не String-типизации.

Цитата:
Сообщение от Wolsh Посмотреть сообщение
Я имел ввиду как то так
Код AS3:
//... Model / InventoryModel
_inventory.hat = 0xFD3490;
_inventory.boots = 0x5539A2;
_inventory.robe = 0xCA4D23;
Скажи, пожалуйста, какой кайф в такой записи? 0xCA4D23 - ни фига же не понятно, что имеется в виду. Почему не задать какие-то осмысленные идентификаторы? Я ведь правильно понимаю, что эта абракадабра - идентификатор для справочника свойств?

Старый 21.10.2017, 19:14
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 83  
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Скажи, пожалуйста, какой кайф в такой записи? 0xCA4D23 - ни фига же не понятно, что имеется в виду
Это не абракадабра, а просто шеснадцатеричная запись uint. FlashDevelop генерирует такой шеснадцатеричный код для цвета при нажатии Ctrl + Shift + K
__________________
Ко мне можно и нужно обращаться на ты)

Старый 21.10.2017, 19:26
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 84  
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 483
А какой смысл в этом контексте задавать код для цвета?

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от Appleman Посмотреть сообщение
А какой смысл в этом контексте задавать код для цвета?
Просто как пример того, что это разные свойства
__________________
Ко мне можно и нужно обращаться на ты)

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
По-моему мы говорим об одном и том же)
Ну, я подразумевал, что InventoryCharacterSlot это действительно Класс, представляющий ячейку для амуниции героя в окне Инвентаря. То есть там 5 или 6 или больше этих слотов для разных типов амуниции. Вот они действительно должны "уметь что-то делать" — размещать картинку, показывать название и характеристики вещи. Но вот эти самые картинка, название и х-ки вещи вовсе не обязаны быть экземпляром этой самой вещи, они могут храниться в справочниках по идентификатору, который вы обозвали "цветом" ))
Тут в чем красота то... Что во все время игры нет никаких экземпляров трусов и носков, они не жрут где-то в темноте память. Даже если игра с видом не от первого лица и на персонажа надо напялить этот шлем, все-равно он просто картинка (или даже 3D-модель) — это забота Вьюхи, эта картинка НЕ ХРАНИТ каких-то магических свойств этого шлема и его сопротивления помятости — это дело Модели, так что они в принципе не могут быть одним экземпляром. Об этом я спрашивал "что ты видишь когда говоришь об экземпляре".
Тот подход, который выглядывает из-за ваших спин когда вы настаиваете на экземплярах, подразумевает какие-то жуткие вещи: что например если у игрока в рюкзаке валяется 6 кинжалов, 4 книги, 33 бутылки, кусок хлеба, драконий глаз, 4 медвежьих какашки и мельхиоровое колечко, то вся эта гадость должна быть СОЗДАНА в виде экземпляров и жить в памяти весь рантайм, вообще ничего не делая. Кому и зачем это нужно? Я серьезно рекомендую подумать о необходимости такого безобразия.
__________________
Reality.getBounds(this);

Старый 22.10.2017, 00:58
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 87  
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 483
Цитата:
Сообщение от Wolsh Посмотреть сообщение
храниться в справочниках по идентификатору, который вы обозвали "цветом" ))
Я так сразу и подумал, что это идентификатор. Но я тем более тогда не понимаю, почему он должен быть в такой трудно воспринимаемой на глаз форме. Если мы имеет где-то справочник свойств, картинок и т.п., это нужно будет каждый раз ломать глаза и голову, чтобы вспомнить, какой идентификатор к какому предмету относится.

Цитата:
вся эта гадость должна быть СОЗДАНА в виде экземпляров и жить в памяти весь рантайм, вообще ничего не делая. Кому и зачем это нужно? Я серьезно рекомендую подумать о необходимости такого безобразия.
Да уж... Не поспоришь. Тогда по твоей логике выходит, что класс Items таки есть, но как "статичный", где в пачке public static массивов хранятся идентификаторы трусов, носков и медвежьих какашек с набором значений для их свойств. Верно?

Старый 22.10.2017, 11:35
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 88  
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Тот подход, который выглядывает из-за ваших спин когда вы настаиваете на экземплярах, подразумевает какие-то жуткие вещи: что например если у игрока в рюкзаке валяется 6 кинжалов, 4 книги, 33 бутылки, кусок хлеба, драконий глаз, 4 медвежьих какашки и мельхиоровое колечко, то вся эта гадость должна быть СОЗДАНА в виде экземпляров и жить в памяти весь рантайм, вообще ничего не делая. Кому и зачем это нужно? Я серьезно рекомендую подумать о необходимости такого безобразия.
Разница между твоим подходом и подходом с хранением всего в экземплярах только в расходе памяти на этот самый экземпляр-обертку, который отжирает небольшие крохи. Сами картинки/модели все равно должны храниться в памяти. Когда игрок заходит в магазин, он должен сразу увидеть все эти вьюхи. И их там будет не 5 или 6, а все доступные. Ощущение от игры резко портится, если все необходимые вьюхи в магазине начинают подргужаться по нажатию кнопки. Это то место, где все должно работать плавно и красиво, так что тут на памяти не сэкономишь. Поэтому я не вижу смысла хранить все раздельно и каждый раз запрашивать по ID нужную картинку или модель в одном месте, текст с описанием в другом, а параметры в третьем, когда всё это легко передается одному экземпляру и сам Item представляет из себя некое подобие копмозиции.
Ещё один момент почему все экземпляры должны храниться в памяти - это то, что в многопользовательской игре, к примеру, невозможно предусмотреть какой экземпляр оружия или амуниции будут использовать другие игроки и при необходимости на их аватаров нужно тоже это все одеть сразу и без задержек, опять же, в угоду этим самым положительным ощущением от игры

Когда разрабатываешь много игр, то по-любому проходишь все эти варианты и останавливаешься на самых действенных. Я тоже когда-то делал и раздельно, как говорит Wolsh, и паковал (и сейчас так делаю) по тому методу, который сам описал, и подгружал по требованию и сразу. Надо всё попробовать, чтобы для себя лучший вариант выбрать. Теория это одно, а на практике всегда много подводных камней появляется
__________________
Ко мне можно и нужно обращаться на ты)


Последний раз редактировалось caseyryan; 22.10.2017 в 11:48.
Старый 23.10.2017, 21:18
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 89  
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Ощущение от игры резко портится, если все необходимые вьюхи в магазине начинают подргужаться по нажатию кнопки.
Ни слова не было о подгрузке. Естественно, все изображения в памяти, мы же (или только я?) предполагаем что они внедрены в swf, "заэмбжены" и рассортированы. Конечно, битмапдата лежит себе в памяти и экземпляры, ссылаясь на нее, не отжирают каждый память под битмапдату. Но вот остальные свойства, выражаемые в подавляющем большинстве своем числами и текстом, у каждого экземпляра будут индивидуальной копией, заполненной из той самой таблицы о которой говорил я, и при том у всех одинаковой. И тут я вспоминаю, как из одной пещеры в Скайриме вынес 360 "яиц коруса" (такое насекомое). И как только в одном из трех моих домов, только в одном из сундуков в алхимической лаборатории, у меня десятки наименований ингредиентов хранились в количествах, измеряемый в К: 1К, 5К и тп. То есть ТЫСЯЧАМИ "экземпляров". Я понимаю, что не в каждой игре такие возможности для стяжательства)))) Я вообще никогда не настаиваю на окончательной правоте "только так и никак иначе". Я просто хочу показать что есть и альтернативные способы, не всегда стоит доверять решению "в лоб". В том же Скайриме, в той же алхимии, сочетаются оба подхода. Есть ингредиенты: всевозможные субстанции, которые можно как покупать в алхимических лавках, так и собирать с растений, трупов животных и тп. У каждого ингредиента есть 4 эффекта (изначально игрок не знает ни одного и вынужден смешивать их вслепую, набираясь опыта). Чтобы получилось зелье, необходимо смешать 2 или 3 ингредиента; при этом какие-то их эффекты должны совпасть — тогда они проявятся у полученного зелья, а игрок получит новую запись в свою "книгу рецептов". Эффектов довольно много, поэтому ингредиенты весьма редко совпадают "методом тыка". Но речь не об этом) У зелья, которое будет создано, эффект будет иметь некое числовое выражение силы: время действия и мощность, например "снижение магии цели на 100 единиц на 43 секунды". Эта сила зависит от навыка Алхимия персонажа, и меняется буквально в процессе "химиченья".
Итак, получается что ингредиенты не имеют никаких уникальных для каждого "кусочка" свойств: есть только 4 эффекта, полностью одинаковые для любого "экземпляра" данного ингредиента. Выходит, что экземпляры здесь явно избыточны.
Зелья наоборот имеют индивидуальные характеристики силы, и без экземпляров здесь не очень то обойдешься (тем более что они существуют не только в инвентаре персонажа, их можно продать и несколько дней спустя увидеть в ассортименте магазина в том же состоянии). Теоретически, это конечно тоже можно решить "записями в индивидуальной табличке инвентаря", без экземпляров. А вот такое действо, как "выбросить" из инвентаря на землю и, вернувшись через пару дней, подобрать бутылку с тем же самым зельем — тут уже возникают вопросы "как".
__________________
Reality.getBounds(this);

Старый 24.10.2017, 06:22
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 90  
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Не знаю как в скайриме, не играл, но если бы я делал подобную систему, то все равно использовал бы экземпляры, ибо не вижу технической разницы между зельями, которых может быть тысячами или какими-то предметами надеваемыми на игрока в единственном экземпляре. У экземпляра просто может быть свойство quantity, в которое и будет записываться количество, которое есть у игрока. И по факту экземпляр всё равно будет один, но игрок будет думать, что их много. А при необходимости можно создать другой экземпляр и указать другое количество. Можно то же самое на примере патронов рассмотреть. Купил игрок 200 патронов для автомата, но это же не значит, что тут же создалось 200 экземпляров патрона. Нет, экземпляр "Патрон" так и будет один в магазине, но quantity будет 200.
С "оберткой" всегда удобнее работать, чем с записями в отдельно. Обертку создал и забыл, никаких заморочек. А запрашивать каждое свойство отдельно очень неудобно
__________________
Ко мне можно и нужно обращаться на ты)

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

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

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


 


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


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