|
|
|||||
Регистрация: Mar 2007
Сообщений: 319
|
Цитата:
Цитата:
var data:BattleData = map[key]; if(data == null) { data = new BattleData(key); map[key] = data; } return data; //или return map[key] || map[key] = new BattleData(key); переменными "_" принято обозначать приватные поля класса которые затем могут быть открыты для чтения/записи через get/set, просто удобство в случае пересечения имен публичных и приватных полей класса
__________________
RocketJump |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
Цитата:
Другой класс - для имён, где хранятся имена, фамилии и прозвища. Там идентификаторов служит ID персонажа. Фактически тоже пачка массивов, забитых именами (на нужном языке). И да, я почитав твои предыдущие советы задумался о том, что "strength" может быть и "силой", а значит и само наименование свойства нужно не задавать жёстко, а брать откуда-то по некоему идентификатору. Хотя, насколько я понимаю, использование строковых идентификаторов такому подходу тоже не противоречит. Цитата:
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Я вот вообще не хотел опускаться в разговоре до конкретного кода, просто потому что всегда есть 100500 способов решить задачу, и какой из них оптимальный, зависит от множества факторов. А когда начинаешь приводить код, выглядит так что ты настаиваешь на конкретно таком вот решении. А я вообще никак не настаиваю, просто показываю возможный вариант, ОК?
package { public class Character { private var _strength:int = 50; private var _intelligence:int = 50; private var _agility:int = 50; public function Character() { } public function get strength():int { return _strength; } public function get intelligence():int { return _intelligence; } public function get agility():int { return _agility; } } } ////-------------------------- package { public class Hash { static public const AGILITY:String = "agility"; static public const STRENGTH:String = "strength"; static public const INTELLIGENCE:String = "intelligence"; static private const HINTS:Object = { strength: ["слабак", "атлет", "силач"], intelligence: ["дурак", "умник", "ботан"], agility: ["тюфяк", "ловкач", "гимнаст"] } static public function getHint(propName:String, propValue:int) : String { if (propValue < 30) return HINTS[propName][0]; if (propValue > 70) return HINTS[propName][2]; return HINTS[propName][1]; } } } ////---------------------- package { import flash.display.Sprite; public class Main extends Sprite { private var _character:Character; public function Main() { _character = new Character(); trace(Hash.getHint(Hash.STRENGTH, _character[Hash.STRENGTH])); trace(Hash.getHint(Hash.INTELLIGENCE, _character[Hash.INTELLIGENCE])); trace(Hash.getHint(Hash.AGILITY, _character[Hash.AGILITY])); } } }
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Уважаемые Nooob и Wolsh!
Спасибо за ваши подробные объяснения. Всё прочитал, осознал и пошёл переваривать и экспериментировать. Думается мне, что для первого опыта программирования я в слишком сложную телегу впрягся По крайней мере я уже третий день туплю и даже не могу начать вообще что-либо программировать. Хотя понимание того, что я в любом случае всего сразу не предусмотрю, уже появилось. Поэтому думаю выбрать какой-то отдельный и законченный участок, который можно создать, и сконцентрируюсь на нём. Цитата:
Вот кстати ещё один методологический вопрос, над которым я размышляю. У всех персонажей есть одинаковые свойства, что логично. При этом у главного героя их больше всего (ибо ему условно не только руками махать, но и девок охмурять), у второстепенных NPC их поменьше, а у "проходных" - буквально 3-4 типа имени с фамилией. Вопрос, как в данной ситуации правильнее организовать: наследовать классы и потом воспользоваться преимуществами полиморфизма (ибо расчёты для центральных персонажей производятся иначе, чем для второстепенных) или создавать единый класс и просто не заполнять неиспользуемые поля значениями для второстепенных персонажей? От чего может зависеть решение? И вопрос камраду Nooob. Я правильно понял логику, что условно все шаблоны и правила расчёта игровой механики "живут" в data, а в model производятся только непосредственные "живые" расчёты для конкретных игровых ситуаций? То есть если действие "пендель" условно наносится с расстояния полметра, а его урон зависит от массы тапка персонажа и его умения бить ногами, то всё это хозяйство прописывается в качестве методов класса game.data.pendel, чтобы потом быть импортированным в model для расчёта по актуальным значениям. Или нет? Последний раз редактировалось Appleman; 07.09.2017 в 20:36. |
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Цитата:
|
|
|||||
Регистрация: Mar 2007
Сообщений: 319
|
Цитата:
твой пример с пенделем можно располагать в data, но если в игре появляются бафы которые влияют на массу тапка и его умения и его урон, то это перестает быть константными данными, и по большей части все данные уже берутся из модели, и логичнее всего такой метод переложить в model
__________________
RocketJump |
|
|||||
Nooob,
Можно узнать ваш способ организаций ответа на действия пользователя? (Controller) Как именно вы реализуете этот процесс. На любом простом примере, например, кнопка изучить скилл.
__________________
Дети не должны знать о своих родителях |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
Потихоньку разбирался и пробовал, в итоге из всех 100500 разнообразных решений для хранения нужных мне строковых данных выбрал всё-таки предложенный тобой код, что не удивительно Сделал в целом похожую конструкцию, она работает. Возникло 2 вопроса. Во-первых, каково преимущество статических переменных и методов перед обычными для подобных классов-"справочников"? В своём примере коллега Nooob, например, сразу после объявления класса создавал в нём константу с экземпляром класса-"справочника" и потом обращался непосредственно к ней. Во-вторых, я попробовал в классе Object с массивами расшифровок заменить прямое указание строковых идентификаторов ("agility", "strength") на константы, содержащие те же значения (попытка записи типа [GlobalValues.FEATURES_STRENGTH], имеющей значение "strength"). Ничего не вышло, выдаёт ошибку. Есть способ непрямого указания идентификаторов в теле Object? |
|
|||||
Цитата:
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Спасибо, понял. А по второму вопросу есть какие-нибудь идеи?
|
Часовой пояс GMT +4, время: 13:43. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|