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

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

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

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 483
Цитата:
Сообщение от caseyryan Посмотреть сообщение
потому что сеттер/геттер - это не простые методы, к ним нужно обращаться как к переменным, без скобок
Код AS3:
_hero.gender.beardLength = 25;
Sorry, это я в ночи уже в форум фигню написал. Нет, естественно назначение идёт как положено:
Код AS3:
_hero.gender.beardLength = 25;
Но всё равно получаю ошибку:
Error: Access of possibly undefined property beardLength through a reference with static type Gender.

Старый 25.09.2017, 11:34
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 52  
undefined

Регистрация: Oct 2006
Сообщений: 2,283
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Каком этом? Если автокомплит знает, значит метод является членом Класса.
Если hasOwnProperty - член класса почему его не видно в потомках?Я думал что имеется в виду раз Object динамический,то и hasOwnProperty добавляется динамически,потому его и не видно в потомках.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
потому его и не видно в потомках.
Не смог найти в Хелпе ни одного класса, у которого бы не было этого метода.

Добавлено через 5 минут
Цитата:
Но всё равно получаю ошибку:
Error: Access of possibly undefined property beardLength through a reference with static type Gender.
Текст ошибки говорит сам за себя: "в классе Гендер нет свойства длинабороды."
И ведь они правы, нет.
__________________
Reality.getBounds(this);

Старый 25.09.2017, 15:18
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 54  
undefined

Регистрация: Oct 2006
Сообщений: 2,283
Цитата:
Не смог найти в Хелпе ни одного класса, у которого бы не было этого метода.
Оно там есть,но вот автокомлит его почему то не видит,хотя компиляции это не мешает.

Старый 25.09.2017, 16:42
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 55  
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Оно там есть,но вот автокомлит его почему то не видит,хотя компиляции это не мешает.
В какой IDE? Это попахивает как раз багом IDE. У меня в FD такое бывало, пока кэш проекта вручную не почистил
__________________
Ко мне можно и нужно обращаться на ты)

Старый 25.09.2017, 16:51
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 56  
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 483
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Текст ошибки говорит сам за себя: "в классе Гендер нет свойства длинабороды."
И ведь они правы, нет.
Тогда я ничего не понимаю. Ты несколькими сообщениями ранее обоснованно рекомендовал убирать свойства и методы подклассов (GenderMale и GenderFemale) из суперкласса (Gender), чтобы не получать "мужика с бородой и талией". Чего-то я по всей видимости в теории наследования не догоняю.

Но в любом случае не понимаю, на кой ляд он ломится в Гендер, если в public переменной character.gender на момент присвоения значения свойства уже хранится экземпляр класса GenderMale, т.е. именно подскласса, а не самого Гендера? Объясни плиз.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Тогда почему тип свойства не GenderMale? Ага, чтобы там мог храниться экземпляр GenderFemale? Ну и как с бородой у неё?
Цитата:
на кой ляд он ломится в Гендер
потому что тип свойства — Gender. На эту ошибку тебе указал компилятор, она выявлена еще до запуска программы, поэтому никакого Male нигде не было, компилятор просто обнаружил что ты обращаешься к свойству экземпляра класса Gender, которого нет у этого класса (притом что класс static type и у него не может появиться это свойство на ходу) и довольно добродушно тебя об этом предупредил.
__________________
Reality.getBounds(this);

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

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 483
Цитата:
потому что тип свойства — Gender. На эту ошибку тебе указал компилятор, она выявлена еще до запуска программы, поэтому никакого Male нигде не было, компилятор просто обнаружил что ты обращаешься к свойству экземпляра класса Gender, которого нет у этого класса (притом что класс static type и у него не может появиться это свойство на ходу) и довольно добродушно тебя об этом предупредил.
Не поспоришь. Только тогда я совсем запутался, уже на концептуальном уровне. Идея разделить свойства пола состояла в том, чтобы не тянуть в каждый из подклассов несвойственные для него свойства, пардон за тавтологию, то есть чтобы не было тёток с бородой. Точно так же у нас могут быть разные профессии для персонажей игры, каждая со своим уникальным набором свойств, и много ещё чего. Смысл всё это раскидывать по разным классам, если обратиться к ним нельзя.

Выходит, возвращаемся к тому, с чего начинали: в Гендере прописываем и бороды, и сись талии, а потом делаем override в подклассах?

Старый 25.09.2017, 18:53
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 59  
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
А почему ты решил, что у женщины не может быть свойства "длина бороды"? Напиши beardLength = 0;
В твоем случае разделение можно сделать немного по-другому. Добавь в Gender свойство beardLength, которое будет задавать длину бороды, но в GenderFemale сделай его перезапись
Код AS3:
override public function set beardLength(value:Number):void {
   trace("Ой, всё! Нет у меня бороды!");
}
override public function get beardLength():Number {
   return 0;
}
Но это сам по себе подход не очень правильный. Ты сможешь обращаться к ним как объектам Gender, только там, где нужны их общие свойства. В частных случаях тебе все равно придется делать каст к GenderMale или GenderFemale.
Я бы, на твоем месте, лучше сделал класс Human, и добавил ему свойство gender. А где надо просто проверял бы
Код AS3:
if (human.gender == Human.MALE) {
    // это мужик, у него есть яй борода
} else {
   // не мужик. 
}

п.с. У нашей училки по русскому в школе, была борода. При чем очень даже окладистая
__________________
Ко мне можно и нужно обращаться на ты)

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

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 483
Цитата:
Сообщение от caseyryan Посмотреть сообщение
А почему ты решил, что у женщины не может быть свойства "длина бороды"? Напиши beardLength = 0;
В твоем случае разделение можно сделать немного по-другому. Добавь в Gender свойство beardLength, которое будет задавать длину бороды, но в GenderFemale сделай его перезапись
Код AS3:
override public function set beardLength(value:Number):void {
   trace("Ой, всё! Нет у меня бороды!");
}
override public function get beardLength():Number {
   return 0;
}
У меня так и было вначале. Но стали возникать закономерные вопросы. С таким подходом получается слишком много писанины: для каждого свойства (и мужского, и женского) потребуется в суперклассе Gender объявить переменную плюс написать пустые сеттер с геттером, чтобы потом переопределить их в классах Male и Female. И Wolsh мне на это указал среди прочих замечаний к коду, который я демонстрировал ранее в этой теме...

Выходит, что проще оставить просто класс Gender безо всяких подклассов, туда свалить все свойства: и бороды, и талии, и гениталии, а потом анализировать уже внутри класса, например, проверяя GenderID каждого экземпляра перед всеми дальнейшими действиями.

Тогда встаёт вопрос, выигрываем ли мы что-нибудь, используя подклассы Gender? Я закладывал, что например, в случаях, где какие-то элементы механики обрабатываются по-разному для мужских и женских персонажей, мы можем создавать абстрактные классы и расширять их с использованием полиморфизма, передавая в них экземпляр подкласса Gender.

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

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

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


 


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


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